日期:2014-05-18 浏览次数:20633 次
给你举个例子 Create proc P1 as select 'a' as ID,'b' as ID2 go Create proc P2 as select 'c' as ID,'d' as ID2 go Create table #(ID nvarchar(2),ID2 nvarchar(2)) insert # exec P1 insert # exec P2 go select * from #--这样获取后再处理 /* ID ID2 a b c d */
------解决方案--------------------
过程所调用的过程中,不能有insert into exec proc 这样的语句:
create table UserInfo (ID int,Name varchar(50),Sex varchar(50))
insert into UserInfo (ID,Name,Sex) values(1,'a','男')
insert into UserInfo (ID,Name,Sex) values(2,'b','女')
go
Create PROCEDURE usp_InnerProc AS
select id from UserInfo
GO
Create PROCEDURE usp_OuterProc AS
create table #t2 (lev int)
insert into #t2 EXECUTE usp_InnerProc;
select * from #t2
GO
Create PROCEDURE usp_ThiredProc AS
create table #t (lev int)
insert into #t EXECUTE usp_OuterProc;
select * from #t
go
exec usp_InnerProc
/*
id
-----------
1
2
(2 行受影响)
*/
exec usp_OuterProc
/*
lev
-----------
1
2
(2 行受影响)
*/
exec usp_ThiredProc
/*
消息 8164,级别 16,状态 1,过程 usp_OuterProc,第 3 行
INSERT EXEC 语句不能嵌套。
*/
go
drop procedure usp_ThiredProc,usp_OuterProc,usp_InnerProc
drop table UserInfo
------解决方案--------------------
这样用,主要用于处理数据
Create proc P1
as
select @@NESTLEVEL
if @@NESTLEVEL<32
exec P1
go
--调用方法
Create table #(ID int)
insert # exec P1
select * from #
go
/*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
*/
--drop proc p1