首页 > 代码库 > 关于INSERT EXEC 语句不能嵌套的解决办法

关于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 语句不能嵌套的解决办法