2011-05-24 99 views
3

我有一個包含存儲過程B的存儲過程A.從存儲過程得到結果集

存儲過程B執行插入並返回一行信息。

有沒有辦法訪問存儲過程A中的信息?

回答

2

您可以執行存儲過程並將其選定到臨時表中。

Create #table().... 

INSERT INTO #table EXEC your_procedure 

當它真正變得困難唯一的一次(也許是不可能的,我從來沒有見過它做)是當存儲過程返回多個記錄(未多條記錄)和記錄集有不同的領域。

編輯: 你也可以使用表變量(DECLARE @my_table TABLE())來做同樣的事情。在你的情況下,你會想嘗試一下,看看哪個更好。

http://www.sql-server-performance.com/2007/temp-tables-vs-variables/

+0

我有一個建議,我們不應該建議OP在這裏使用臨時表,因爲根據OP,只有一行要獲取。赦免任何錯誤。 – Pankaj 2011-05-24 13:51:12

+0

我同意,但爲了概括答案,我們應該表明可以使用臨時表。他的需求(或其他人)可能會改變它返回多行而不是一行的位置。 – kemiller2002 2011-05-24 14:01:12

+0

是的。同意。但OP目前的需求是隻取一行。在許多行的情況下,我將欣賞臨時表。謝謝 – Pankaj 2011-05-24 14:03:05

1

您可以創建一個臨時表,然後從內部過程調用插入-EXEC。

Share Data

向下滾動到插入 - Exec的部分。

+0

根據OP場景,在這種情況下應該避免使用表格表格,因爲只有單個行會被取出,所以我認爲應該使用表格變量。請糾正我。赦免任何錯誤。 – Pankaj 2011-05-24 13:52:20

+0

這個問題被標記爲sql-server。如果您使用SQL2005或更新的版本,只能將-exec插入到表變量中。使用臨時表適用於所有版本的SQL。此外,由於只有一行,因此臨時表和表變量之間的性能(和內存)差異將可以忽略不計。 – 2011-05-24 14:37:33

0

我會建議你創建一個Table variable並插入行的信息到它

編輯:

請注意,如果不是在交易,而不是與其他表連接,並將這個行動將是有益作爲包含行信息的中間體,正如您在查詢中所述。