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

 

转载于:https://www.cnblogs.com/riyizhang/p/6551025.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值