关于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) 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM