簡體   English   中英

將結果從存儲過程返回到另一個存儲過程

[英]Return results from stored proc to another stored proc

我有一個存儲過程 - [dbo].[DynamicPivotTableInSql1] 我需要從另一個存儲過程調用並繼續進一步的查詢創建。 我看到存儲過程 [dbo].[DynamicPivotTableInSql1] 正在成功執行,但沒有返回結果。 如果我在這里做錯了什么,請告訴我。

我最近發布了一個相關問題,但進一步分析發現結果沒有返回到調用存儲過程是問題所在。

我需要在[dbo].[DynamicPivotTableInSql1]中使用動態sql,因為查詢相當復雜,我必須根據某些輸入參數擴展where子句。 我只貼了一部分。

感謝您的幫助和時間!

CREATE PROCEDURE [dbo].[DynamicPivotTableInSql1]

AS
BEGIN
DECLARE @colsPivot AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX),
@str_comp1 AS NVARCHAR(MAX),
@str_comp2 AS NVARCHAR(MAX) 


SET @str_comp1 = ' comp1 IN (''Capacity'') and '
SET @str_comp2 = ' comp2 IN (''Refinery'') '

SET @colsPivot = 'SELECT STUFF((SELECT  '','' 
                      + quotename(link_id)
                    from [dbo].[test_excel_poc_head] t
WHERE ' + @str_comp1 +  @str_comp2 + '
FOR XML PATH(''''), TYPE ).value(''.'', ''NVARCHAR(MAX)'') 
,1,1,'''')'

EXEC(@colsPivot)
END

調用流程如下:

BEGIN
DECLARE @colsPivot1 AS NVARCHAR(MAX),
@return_result  AS NVARCHAR(MAX) 

EXEC    @return_result = [dbo].[DynamicPivotTableInSql1]
print('Return Value: ' + @return_result)
END

下面是執行存儲過程 [dbo].[DynamicPivotTableInSql1] 的結果: 在此處輸入圖片說明

但下面是返回的結果: 在此處輸入圖片說明

您的問題是您試圖將存儲過程用作函數。 存儲過程返回一個數值,0 表示成功,或另一個表示錯誤的值。

函數不允許調用諸如EXEC東西,但是,您可以將存儲過程的變量定義為OUTOUTPUT (取決於需要),在您的情況下,您似乎只需要OUT

以下是如何執行此操作的示例:

/* Create base procedure with an OUT parameter */
CREATE OR ALTER PROCEDURE dbo.Procedure1 (
    @results xml OUT -- OUT parameter to return the results.
)
AS
BEGIN

    /* Build dynamic SQL statement */
    DECLARE @statement nvarchar(1000) = 'SET @dynamicResults = ( SELECT * FROM Misc FOR XML PATH( '''' ), TYPE );';

    /* Execute the dynamic SQL statement and capture results into the @results OUT parameter */
    EXEC sp_executesql @statement, N'@dynamicResults xml OUT', @dynamicResults = @results OUT;

END
GO

/* Create a procedure that captures the results from the base procedure */
CREATE OR ALTER PROCEDURE dbo.Procedure2
AS
BEGIN

    /* Declare variable to capture the results from Procedure1 */
    DECLARE @results xml;

    /* Call Procedure1 and capture its results */
    EXEC dbo.Procedure1 @results OUT;

    /* Return the results from Procedure1 */
    SELECT @results AS ResultsFromProcedure1;

END
GO

/* Call Procedure2 */
EXEC dbo.Procedure2;

在此示例中調用Procedure2僅返回從Procedure1捕獲的結果。 獲得第一個程序的結果后,您可以繼續使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM