关于INSERT EXEC 语句不能嵌套的解决办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于INSERT EXEC 语句不能嵌套的解决办法相关的知识,希望对你有一定的参考价值。

 一、问题

    之前做项目的时候遇到过要在一个存储过程要操作另一个存储过程返回的结果集,想通过调用的存储过程保存到局部临时表进行操作。执行下面的sql,会提示:

 消息 8164,级别 16,状态 1,过程 zryCreatePlantPlanningReport,第 27 行

 INSERT EXEC 语句不能嵌套。

 

技术分享
1  DROP TABLE #demo
2  CREATE TABLE #demo
3  (
4           ZK_PLANNING_ID NVARCHAR(50),
5       ZK_PLAN_TITLE NVARCHAR(200),
6       ZK_FLOW_ID NVARCHAR(50),
7  )
8  INSERT #demo
9  EXEC zryCreatePlantPlanningReport 100 , 1975-02-03 , 2016-11-23,123, 1 
View Code

 

 

二、利用全局临时表,实现结果集的跨存储过程使用,为防止并发的问题,创建的全局临时表是根据会话ID命名的  

  1、被调用的存储过程创建全局临时表。

1 EXEC(SELECT * INTO ##tempPlantReportData_ + CONVERT(NVARCHAR(20), @@SPID) +  FROM #plantReportData)

 

     2、调用的存储过程,通过EXEC(@sql)可以操作上面所生成的全局临时表,其中@sql为sql字符串

1  DECLARE @sql NVARCHAR(MAX) = SELECT * FROM ##tempPlantReportData_ + CONVERT(NVARCHAR(20), @@SPID)
2  EXEC (@sql)

 

      3、删除全局临时表

 1 EXEC(DROP TABLE ##tempPlantReportData_ + @@SPID) 

 

以上是关于关于INSERT EXEC 语句不能嵌套的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

sp_replmonitorhelppublisher-“不能嵌套INSERT EXEC语句。”

异常为"当IDENTITY_INSERT设置为OFF时" 解决办法

mysql中insert与select的嵌套使用解决组合字段插入问题

oracle 在sql>状态下 执行insert into select 正常 将这一段复制到存储过程中 再EXEC 就很慢

oracle 导出超长Clob字段insert语句执行报字段过长的问题解决方案

关于if和else嵌套—蛋疼