请教各位是如何处理'INSERT EXEC 语句不能嵌套'的?

LWH006 2004-08-10 11:48:22
比如 insert into #TEMP5 EXEC MXZ '6/8/2004','06/9/2004'
而过程MXZ中也有insert into #TEMP EXEC PROC_A 等类似语句。
总之,就是要把MXZ生成的结果放到当前的临时表 #TEMP5 中,请教各位,有什么高招。谢谢先!
...全文
975 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jackile 2004-08-11
  • 打赏
  • 举报
回复
关注。。。。。。。。。。。
LWH006 2004-08-11
  • 打赏
  • 举报
回复
TO wutao411 和 阿来:
临时表事先存在,字段顺序也对应。已确认问题出在语句"insert into exec 一个带有insert into的过程名" ,会提示出错,说insert into exec 不能嵌套。

TO 小黑:
  您说的把Procedure改为函数的方法应该具有通用性,凡是这类的问题都可以照此办理。比如这样的问题:
PROC_1调用PROC_2,PROC_2调用PROC_3,PROC_3调用PROC_4,PROC_4调用PROC_5,
PROC_5返回些行集给PROC_4,PROC_4返回些行集给PROC_3,PROC_3返回些行集给PROC_2,PROC_2返回些行集给PROC_1,从而得到最后的结果。假如用这样的方法:
  在PROC_1中写:insert into #TEMP1 exec PROC_2
  在PROC_2中写:insert into #TEMP2 exec PROC_3
  在PROC_3中写:insert into #TEMP3 exec PROC_4
  在PROC_4中写:insert into #TEMP4 exec PROC_5
就会出现楼顶提出的错误了(假设那些临时表都已存在)。而改用小黑说的写出成function的方法:
  在func_1中写:insert into #TEMP1 select * from func_2()
  在func_2中写:insert into #TEMP2 select * from func_3()
  在func_3中写:insert into #TEMP3 select * from func_4()
  在func_4中写:insert into #TEMP4 select * from func_5()
就成。
之前解决这个问题,我是用建立全局临时表##TEMP???? 的方法,感觉不爽才提这个问题的。

谢谢楼上大伙的帮助!
prcgolf 2004-08-11
  • 打赏
  • 举报
回复
up
happydreamer 2004-08-10
  • 打赏
  • 举报
回复
先看看过程MXZ有返回记录吗
你的insert into #TEMP EXEC PROC_A 在过程里是没返回记录的,所以不能插入到#temp5

happydreamer 2004-08-10
  • 打赏
  • 举报
回复
如果是这样就报错

create proc PROC_A
as

select '1' union select '2' union select '3'

go

create proc MXZ
as

create table #TEMP (b int)
insert into #temp exec PROC_A

select '4' union select '5' union select '6'

go


create table #TEMP5 (c int)

insert into #temp5 exec MXZ
WangZWang 2004-08-10
  • 打赏
  • 举报
回复
可以的
insert into #TEMP5
EXEC MXZ '6/8/2004','06/9/2004'
不过先要建好临时表,而看MXZ 是否返回结果集
happydreamer 2004-08-10
  • 打赏
  • 举报
回复
这样改就可以了

把PROC_A 改为function
你看一下整个是简化示例



CREATE FUNCTION PROC_A ()
RETURNS @a TABLE
(
a int
)

AS
BEGIN
INSERT @a
select '4' union select '5' union select '6'

RETURN
END

go


create proc MXZ
as

create table #TEMP (b int)
insert into #temp SELECT * from PROC_A ()

select '4' union select '5' union select '6'

go


--测试
create table #TEMP5 (c int)

insert into #temp5 exec MXZ
了缘 2004-08-10
  • 打赏
  • 举报
回复
insert into table2(chr1,chr2) exec('select ''1'',''2''')

运行成功
所以应该可以嵌套
查一下存储过程,看字段是否对应,
LWH006 2004-08-10
  • 打赏
  • 举报
回复
谢谢小黑的关注!
MXZ是有返回记录的,为的就是这个,专门就是要它的返回记录的。
MXZ是早就建好的过程,也可以其它方式调用。

运行
insert into #TEMP5 EXEC MXZ '6/8/2004','06/9/2004'
就会出错,说是 "INSERT EXEC 不能嵌套"

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧