共用方式為


使用 OUTPUT 參數傳回資料

如果在程序定義中為參數指定 OUTPUT 關鍵字,預存程序就可以在結束時將參數目前的值傳回呼叫程式。若要將參數值儲存在可供呼叫程式使用的變數中,呼叫程式在執行預存程序時必須使用 OUTPUT 關鍵字。

範例

以下範例示範的預存程序有一個輸入參數和一個輸出參數。預存程序中的第一個參數 @SalesPerson 接收呼叫程式所指定的輸入值,第二個參數 @SalesYTD 則會將值傳回給呼叫程式。SELECT 陳述式使用 @SalesPerson 參數來取得正確的 SalesYTD 值,並將值指定給 @SalesYTD 輸出參數。

USE AdventureWorks;
GO
IF OBJECT_ID('Sales.uspGetEmployeeSalesYTD', 'P') IS NOT NULL
    DROP PROCEDURE Sales.uspGetEmployeeSalesYTD;
GO
CREATE PROCEDURE Sales.uspGetEmployeeSalesYTD
@SalesPerson nvarchar(50),
@SalesYTD money OUTPUT
AS  

    SET NOCOUNT ON;
    SELECT @SalesYTD = SalesYTD
    FROM Sales.SalesPerson AS sp
    JOIN HumanResources.vEmployee AS e ON e.EmployeeID = sp.SalesPersonID
    WHERE LastName = @SalesPerson;
RETURN
GO

下列陳述式會以輸入參數的值來執行預存程序,並將預存程序的輸出值儲存至呼叫程式的本機變數 @SalesYTD

-- Declare the variable to receive the output value of the procedure.
DECLARE @SalesYTDBySalesPerson money;
-- Execute the procedure specifying a last name for the input parameter
-- and saving the output value in the variable @SalesYTDBySalesPerson
EXECUTE Sales.uspGetEmployeeSalesYTD
    N'Blythe', @SalesYTD = @SalesYTDBySalesPerson OUTPUT;
-- Display the value returned by the procedure.
PRINT 'Year-to-date sales for this employee is ' + 
    convert(varchar(10),@SalesYTDBySalesPerson);
GO

執行預存程序時,也可以對 OUTPUT 參數指定輸入值。這可讓預存程序接收來自呼叫程式的值,變更它或對它執行作業,然後將新值傳回給呼叫程式。在上述範例中,在執行預存程序之前,可先指定 @SalesYTDBySalesPerson 變數的值。@SalesYTD 變數包含預存程序主體中的參數值,當預存程序結束時,@SalesYTD 變數的值會傳回給呼叫程式。這通常稱為「以傳址方式傳遞的能力」。

執行預存程序時,如果您對參數指定 OUTPUT,但該參數在預存程序中並未使用 OUTPUT 來定義,則您會得到錯誤訊息。您可以用 OUTPUT 參數來執行預存程序,但在執行預存程序時不要指定 OUTPUT。這樣不會傳回錯誤,但您不能在呼叫程式中使用輸出值。

請參閱

概念

使用傳回碼傳回資料
在 OUTPUT 參數中使用 cursor 資料類型

其他資源

EXECUTE (Transact-SQL)
從預存程序傳回資料
DECLARE @local\_variable (Transact-SQL)
PRINT (Transact-SQL)
SET @local\_variable (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助