我最近在写一个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 P1asselect 'a' as ID,'b' as ID2goCreate proc P2asselect 'c' as ID,'d' as ID2goCreate table #(ID nvarchar(2),ID2 nvarchar(2))insert # exec P1insert # exec P2goselect * from #--这样获取后再处理/*ID ID2a bc 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','女')goCreate PROCEDURE usp_InnerProc AS select id from UserInfoGOCreate PROCEDURE usp_OuterProc AS create table #t2 (lev int) insert into #t2 EXECUTE usp_InnerProc; select * from #t2GOCreate PROCEDURE usp_ThiredProc AS create table #t (lev int) insert into #t EXECUTE usp_OuterProc; select * from #tgoexec usp_InnerProc/*id-----------12(2 行受影响)*/exec usp_OuterProc/*lev-----------12(2 行受影响)*/exec usp_ThiredProc/*消息 8164,级别 16,状态 1,过程 usp_OuterProc,第 3 行INSERT EXEC 语句不能嵌套。*/godrop procedure usp_ThiredProc,usp_OuterProc,usp_InnerProcdrop table UserInfo
------解决方案--------------------
这样用,主要用于处理数据
- SQL code
Create proc P1as select @@NESTLEVELif @@NESTLEVEL<32 exec P1go--调用方法Create table #(ID int)insert # exec P1select * from #go/*1234567891011121314151617181920212223242526272829303132*/--drop proc p1