我面臨的情況是,我需要在另一個存儲過程中使用一個存儲過程的結果。我的第一個存儲過程返回一個表的一個子集,我想在第二個存儲過程中使用它。如何讓sql server存儲過程結果在其他存儲過程中進行處理?
exec dbo.myprcedure param
返回結果,但我需要捕獲它在另一個存儲過程。
任何幫助,將不勝感激。
我面臨的情況是,我需要在另一個存儲過程中使用一個存儲過程的結果。我的第一個存儲過程返回一個表的一個子集,我想在第二個存儲過程中使用它。如何讓sql server存儲過程結果在其他存儲過程中進行處理?
exec dbo.myprcedure param
返回結果,但我需要捕獲它在另一個存儲過程。
任何幫助,將不勝感激。
東西在任何一個FUNCTION
或STORED 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
數據。
相反,存儲過程,你可以使用view..A視圖可以選擇含有數據的從table.First創建一個視圖然後調用視圖中的存儲過程的
或
創建一個臨時table.from臨時表就可以獲取數據的
前提是隻返回一個結果集,您可以創建一個臨時表,然後使用語法
INSERT INTO #tmp
EXEC dbo.myprocedure @param
見https://stackoverflow.com/a/14623262/8479
但是總的來說,最好找到一種不同的方法,使用table-valued variables或使用函數而不是proc。
執行您內部的第一個存儲過程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
我正在使用實體框架6,我不想使用視圖,因爲它們使得它太慢而無法挖掘數據。 – Lali