Sql server 如何解决INSERT EXEC语句不能嵌套的SQL错误?

Sql server 如何解决INSERT EXEC语句不能嵌套的SQL错误?,sql-server,Sql Server,我需要一个存储过程。我试图在临时表中获取这些值。但我得到下面的错误消息 错误: 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), Production

我需要一个存储过程。我试图在临时表中获取这些值。但我得到下面的错误消息

错误:

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

请您帮助解决这个问题。

根据您的要求,我想您应该在结果的存储过程中放置一个select查询,以便在执行时将其插入表中。我有一个例子,希望它能解决你的问题:

此过程接受一个输入,向值中添加1,然后选择结果,如下所示

CREATE  PROCEDURE TEST
@VAL INT
AS  
BEGIN
DECLARE @NEW INT
SET @NEW=@VAL+1
SELECT @VAL,@NEW
END
现在,我创建了一个临时表并插入了执行结果:

declare @temps table (ins int)
insert into @temps exec test '2'
insert into @temps exec test '3'
insert into @temps exec test '4'
insert into @temps exec test '5'

select * from @temps
结果是:

+---+---+
|ins|fin|
+---+---+
|2  |3  |
+---+---+
|3  |4  |
+---+---+
|4  |5  |
+---+---+
|5  |6  |
+---+---+

如果您要查找的是proc到表中的输出,那么我通常会使用过程本身的代码定义,而不是执行
选择
,而是将数据插入到表中进行进一步处理(例如,我对sp_spaceused的部分输出感兴趣,但希望对输出执行额外的计算,并省略一些列。但是,当尝试将输出存储到临时表或表变量中时,会弹出相同的错误消息)

为此,在SSMS中,展开数据库,然后展开可编程性文件夹“存储过程”,并找到有问题的进程。右键单击它,然后选择“修改”。这将在新的查询窗口中编写该进程的定义脚本,然后在该窗口中,您可以根据自己的喜好修改它


明显的缺点是,如果原始过程中的逻辑发生更改,则必须对新创建的逻辑进行第二次更新,因为您实际上只是复制了代码。

如果您搜索web,您会发现关于相当复杂的解决方法的建议,如:


但简短的回答是否定的。也许这是一个很好的迹象,表明是时候对当前的实施进行审查,看看是否可以改进。如果您执行以下操作,该怎么办:

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\u MES\u UnitOEE,而不是执行

select *
from #result


我对这个主题不太了解,但我认为它应该起作用(这可能不是一个好的解决方案)。

可能重复此存储过程值或以任何其他方式将此存储过程值放入另一个表中。
select *
into dbo.temp
from #result