2011-02-02 236 views
5

是否可以在另一個存儲過程中使用一個存儲過程的結果?使用嵌套的存儲過程結果調用存儲過程Sql Server 2008

I.e.

CREATE PROCEDURE [dbo].[Proc1] 
     @ID INT, 
     @mfgID INT, 
     @DealerID INT 

AS 
BEGIN 

    DECLARE @Proc1Result UserDefinedTableVariable 

    EXEC @Proc1Result = Proc2 
     @SomeID = @ID, 
     @SomeID2 = @mfgID, 
     @SomeID3 = @DealerID 

    -- Now I want to use the table returned by the stored procedure here. 
    SELECT [col1],[col2] FROM @Proc1Result 

END 

我用INSERT INTO @Proc1Result EXEC Proc2 (with parameters passed)試過,但INSERT EXEC不能在嵌套的語句來調用。

有沒有實現這一點的方法嗎?環境是SQL Server 2008的

回答

9

可以通過嵌套存儲過程up to 32 levels

我會推薦閱讀過this article有關INSERT-EXEC。這裏是一個SNIPPIT:

如果some_sp試圖some_other_sp 用INSERT-EXEC打電話,你會得到一個 錯誤消息。因此,一次只能有一個INSERT-EXEC激活 。這個 是SQL Server的一個限制。

5

你是對的,INSERT ... EXEC不能嵌套。從How to Share Data Between Stored Procedures

它不能嵌套。如果some_sp試圖 呼叫some_other_sp用INSERT-EXEC, 你會得到一個錯誤信息。因此, 一次只能有一個INSERT-EXEC 處於活動狀態。這是SQL Server中的一個 限制。

你需要找到一些其他的方式。 Erland的文章鏈接幾乎涵蓋了所有的選項,並對其進行了詳細討論。

用於獲取結果從另一一個SP
+0

我是如何發佈完全相同的鏈接並在2分鐘之前引用的,但你有更多的選票?必須是泰迪熊... – 2011-02-02 23:39:25

+1

@Abe:我已經格式化了程序名稱,這需要花費數小時和數小時的工作,選民也很欣賞額外的努力;) – 2011-02-02 23:57:12

1

一個語法是:

INSERT INTO [myTable] 
EXEC Proc1 [param1], [param2], [param3], etc. 

但你必須首先創建表,它插入到與字段名和類型必須完全匹配。