首页 > 代码库 > 关于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‘
二、利用全局临时表,实现结果集的跨存储过程使用,为防止并发的问题,创建的全局临时表是根据会话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 语句不能嵌套的解决办法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。