2014-02-10 46 views

回答

0

東西在任何一個FUNCTIONSTORED PROCEDURE,然後使用該TABLE VARIABLE在您的主叫存儲過程作進一步處理或傳遞到另一個存儲過程作爲表變量參數只是返回表變量。

即創建一個函數,如下所示返回一個TABLE VARIABLE。

CREATE PROCEDURE MyProcedureThatReturnsATable() 
RETURNS @ReturnTable TABLE 
(
    -- specify columns returned by the proc here 
    ID INT NOT NULL, 
    Name nvarchar(255) NOT NULL 
) 
AS 
BEGIN 
. 
.. 
... 

--This select returns data 
INSERT INTO @ReturnTable 
SELECT ID, Name FROM SOME_TABLES 

RETURN 

END 

然後,在存儲過程中的親本,可以執行上面的存儲過程和在該父存儲過程如下填充表變量。

DECLARE @MyParentTableVariable as TABLE (ID INT, Name nvarchar(255)) 

INSERT INTO @MyParentTableVariable 
EXECUTE MyProcedureThatReturnsATable 

所以現在,在存儲過程中的父母,你有一個表變量從MyProcedureThatReturnsATable數據。

0

相反,存儲過程,你可以使用view..A視圖可以選擇含有數據的從table.First創建一個視圖然後調用視圖中的存儲過程的

創建一個臨時table.from臨時表就可以獲取數據的

+0

我正在使用實體框架6,我不想使用視圖,因爲它們使得它太慢而無法挖掘數據。 – Lali

0

前提是隻返回一個結果集,您可以創建一個臨時表,然後使用語法

INSERT INTO #tmp 
EXEC dbo.myprocedure @param 

https://stackoverflow.com/a/14623262/8479

但是總的來說,最好找到一種不同的方法,使用table-valued variables或使用函數而不是proc。

+0

我無法理解你最後一行的更好方法。 你的答案令人印象深刻。 – Lali

+0

那麼upvote呢? :) – Rory

0

執行您內部的第一個存儲過程Secod存儲過程並在那裏使用結果。像

CREATE PROCEDURE Proc_2 
@param 
AS 
BEGIN 
SET NOCOUNT ON; 

/* Create a Temp Table here say #TempTable*/ 

INSERT INTO #TempTable 
exec dbo.myporcedure @param 

/* Your rest of the code that needs to work with the result set of dbo.myporcedure */ 

END