insert into table2(chr1,chr2) exec('select ''1'',''2''')运行成功 所以应该可以嵌套 查一下存储过程,看字段是否对应,
这样改就可以了把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 ENDgo create proc MXZ ascreate 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
可以的 insert into #TEMP5 EXEC MXZ '6/8/2004','06/9/2004' 不过先要建好临时表,而看MXZ 是否返回结果集
如果是这样就报错create proc PROC_A asselect '1' union select '2' union select '3'gocreate proc MXZ ascreate table #TEMP (b int) insert into #temp exec PROC_Aselect '4' union select '5' union select '6'go create table #TEMP5 (c int)insert into #temp5 exec MXZ
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???? 的方法,感觉不爽才提这个问题的。 谢谢楼上大伙的帮助!
MXZ是有返回记录的,为的就是这个,专门就是要它的返回记录的。
MXZ是早就建好的过程,也可以其它方式调用。运行
insert into #TEMP5 EXEC MXZ '6/8/2004','06/9/2004'
就会出错,说是 "INSERT EXEC 不能嵌套"
所以应该可以嵌套
查一下存储过程,看字段是否对应,
你看一下整个是简化示例CREATE FUNCTION PROC_A ()
RETURNS @a TABLE
(
a int
)AS
BEGIN
INSERT @a
select '4' union select '5' union select '6' RETURN
ENDgo
create proc MXZ
ascreate 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
insert into #TEMP5
EXEC MXZ '6/8/2004','06/9/2004'
不过先要建好临时表,而看MXZ 是否返回结果集
asselect '1' union select '2' union select '3'gocreate proc MXZ
ascreate table #TEMP (b int)
insert into #temp exec PROC_Aselect '4' union select '5' union select '6'go
create table #TEMP5 (c int)insert into #temp5 exec MXZ
临时表事先存在,字段顺序也对应。已确认问题出在语句"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???? 的方法,感觉不爽才提这个问题的。 谢谢楼上大伙的帮助!