OUTPUT パラメータを使用してデータを返す処理
プロシージャの定義でパラメータに OUTPUT キーワードを指定すると、ストアド プロシージャの終了時にそのパラメータの現在値を呼び出し側のプログラムに返すことができます。呼び出し側のプログラムで使用できる変数にパラメータの値を保存するには、呼び出し側のプログラムがストアド プロシージャを実行する際に OUTPUT キーワードを使用する必要があります。
例
次の例では、入力パラメータと出力パラメータを使用するストアド プロシージャを示します。ストアド プロシージャの最初のパラメータ @SalesPerson
は、呼び出し側のプログラムが指定する入力値を受け取り、2 番目のパラメータ @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)