码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-03-14 22:46:38      阅读:1037      评论:0      收藏:0      [点我收藏+]

标签:技术   全局   play   保存   display   start   lap   block   cat   

 一、问题

    之前做项目的时候遇到过要在一个存储过程要操作另一个存储过程返回的结果集,想通过调用的存储过程保存到局部临时表进行操作。执行下面的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 语句不能嵌套的解决办法

标签:技术   全局   play   保存   display   start   lap   block   cat   

原文地址:http://www.cnblogs.com/riyizhang/p/6551025.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!