使用 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)