一、問題
之前做項目的時候遇到過要在一個存儲過程要操作另一個存儲過程返回的結果集,想通過調用的存儲過程保存到局部臨時表進行操作。執行下面的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'
二、利用全局臨時表,實現結果集的跨存儲過程使用,為防止並發的問題,創建的全局臨時表是根據會話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)