我只有一个存储过程。我试图在临时tabe中得到这个值。但是我得到了下面的错误信息。
错误:
Msg 8164, Level 16, State 1, Procedure spLocal_MES_UnitOEE, Line 200
An INSERT EXEC statement cannot be nested.
这是我的SQL语句。
Declare @tempJanMonth_OEE table(CurrentStatusIcon int, UnitName Varchar(20), ProductionAmount float, AmountEngineeringUnits varchar(20), ActualSpeed float, IdealProductionAmount float, IdealSpeed float,
SpeedEngineeringUnits varchar(50), PerformanceRate float, WasteAmount int, QualityRate int, PerformanceTime varchar(20), RunTime varchar(20), LoadingTime varchar(20), AvailableRate float, PercentOEE float, HighAlarmCount int,
MediumAlarmCount int, LowAlarmCount int, UnitId varchar(200), CategoryID int, Production_Variable varchar(100), SummaryRow int);
Insert into @tempJanMonth_OEE
Exec spLocal_MES_UnitOEE '14;15;16;3;7;9;4;5;24;25;','2017-05-14 07:00:00 AM','2017-05-15 07:00:00 AM',1,NULL,1,NULL
Select * from @tempJanMonth_OEE
你能帮我解决这个问题吗。
发布于 2017-05-15 10:58:15
如果您想要的是将proc输出到一个表中,我通常会使用过程本身的代码定义,但不是执行SELECT
,而是将数据插入到表中进行进一步处理(例如,我对sp_spaceused输出的一部分感兴趣,但希望对输出执行额外的计算,并省略一些列。但是,当试图将输出存储到临时表或表变量时,会弹出相同的错误消息)。
为此,在SSMS中,展开数据库,然后展开可编程文件夹“存储过程”,并找到有问题的proc。右击它,然后选择“修改”。这将将proc的定义脚本到一个新的查询窗口中,然后您可以将其修改为您心中的内容。
明显的缺点是,如果原始proc中的逻辑发生变化,则必须对新创建的逻辑进行第二次更新,因为您实际上只是重复了代码。
发布于 2017-05-15 13:15:52
如果你在网上搜索,你会发现一些相当复杂的解决方案,比如:Errors: "INSERT EXEC statement cannot be nested." and "Cannot use the ROLLBACK statement within an INSERT-EXEC statement." How to solve this?。
但简短的回答是否定的。也许这是一个很好的迹象,表明现在是审查目前执行情况的时候了,看看是否可以加以改进。
发布于 2017-09-22 15:00:39
如果你做了以下几件事呢:
Exec spLocal_MES_UnitOEE '14;15;16;3;7;9;4;5;24;25;','2017-05-14 07:00:00 AM','2017-05-15 07:00:00 AM',1,NULL,1,NULL
Insert into @tempJanMonth_OEE
select * from dbo.temp
drop table dbo.temp
其中的过程spLocal_MES_UnitOEE,而不是做
select *
from #result
有吗?
select *
into dbo.temp
from #result
我对这个话题不太了解,但我认为它应该有效(也许这不是一个好的解决方案)。
https://stackoverflow.com/questions/43975239
复制相似问题