關於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