日期:2014-05-18  浏览次数:20505 次

紧急,紧急求教sql存储过程嵌套的问题!!!
我最近在写一个sql下程序,需要用四个存储过程嵌套,至少要嵌套三层,但我现在只能嵌套到两层,在从嵌套的那个存储过程在调存储过程时就报错:exec Insert不能嵌套,不知道怎么回事,我在网上搜索了下,有人说能嵌套32层,不知道怎么用郁闷!

我要这样调用存储过程的,insert into tablename exec Store_PorcedureName,三层都是这样用的。

十万火急,明天项目要上线,谢谢,谢谢,再谢谢高手赐教!

------解决方案--------------------
单这句话:
insert into tablename exec Store_PorcedureName
本身并不错,你那个嵌套是指什么样的调用呢?
------解决方案--------------------
临时表
insert into #tb exec(@sql)
------解决方案--------------------
SQL code
给你举个例子

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 这样的语句:
SQL code
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

------解决方案--------------------
这样用,主要用于处理数据
SQL code

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