パラメータの方向の指定

パラメータの方向は、入力または出力です。入力の場合は、値がストアド プロシージャの入力パラメータに渡されます。出力の場合は、ストアド プロシージャが出力パラメータを使用して呼び出し元プログラムに値を返します。既定値は入力パラメータです。

出力パラメータを指定するには、ストアド プロシージャのパラメータの定義に OUTPUT キーワードを指定する必要があります。ストアド プロシージャは終了時に、呼び出し元プログラムに現在の出力パラメータの値を返します。呼び出し元プログラムも、呼び出し元プログラムで使用できる変数にパラメータの値を保存するために、ストアド プロシージャの実行時に OUTPUT キーワードを使用する必要があります。詳細については、「OUTPUT パラメータを使用してデータを返す処理」を参照してください。

次の例では、指定した価格を超えない製品の一覧を返す Production.usp_GetList ストアド プロシージャを作成します。ここでは、複数の SELECT ステートメントと複数の OUTPUT パラメータを使用する例を示しています。外部プロシージャ、バッチ、または複数の Transact-SQL ステートメントは、OUTPUT パラメータを使用して、プロシージャの実行中に設定された値にアクセスできます。

USE AdventureWorks;
GO
IF OBJECT_ID ( 'Production.uspGetList', 'P' ) IS NOT NULL 
    DROP PROCEDURE Production.uspGetList;
GO
CREATE PROCEDURE Production.uspGetList @Product varchar(40) 
    , @MaxPrice money 
    , @ComparePrice money OUTPUT
    , @ListPrice money OUT
AS
    SET NOCOUNT ON;
    SELECT p.[Name] AS Product, p.ListPrice AS 'List Price'
    FROM Production.Product AS p
    JOIN Production.ProductSubcategory AS s 
      ON p.ProductSubcategoryID = s.ProductSubcategoryID
    WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice;
-- Populate the output variable @ListPprice.
SET @ListPrice = (SELECT MAX(p.ListPrice)
        FROM Production.Product AS p
        JOIN  Production.ProductSubcategory AS s 
          ON p.ProductSubcategoryID = s.ProductSubcategoryID
        WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice);
-- Populate the output variable @compareprice.
SET @ComparePrice = @MaxPrice;
GO

usp_GetList を実行し、原価が $700 未満である Adventure Works 製品 (自転車) の一覧を返します。ここではフロー制御言語と共に OUTPUT パラメータの @cost および @compareprices を使用して、[メッセージ] ウィンドウにメッセージを返します。

注意注意

プロシージャの作成中および変数の使用中に、OUTPUT 変数を定義する必要があります。パラメータ名と変数名が一致する必要はありません。ただし、データ型とパラメータの位置は一致する必要があります (@listprice= variable が使用されている場合は除きます)。

DECLARE @ComparePrice money, @Cost money 
EXECUTE Production.uspGetList '%Bikes%', 700, 
    @ComparePrice OUT, 
    @Cost OUTPUT
IF @Cost <= @ComparePrice 
BEGIN
    PRINT 'These products can be purchased for less than 
    $'+RTRIM(CAST(@ComparePrice AS varchar(20)))+'.'
END
ELSE
    PRINT 'The prices for all products in this category exceed 
    $'+ RTRIM(CAST(@ComparePrice AS varchar(20)))+'.'

次に結果セットの一部を示します。

Product                                            List Price
-------------------------------------------------- ------------------
Road-750 Black, 58                                 539.99
Mountain-500 Silver, 40                            564.99
Mountain-500 Silver, 42                            564.99
...
Road-750 Black, 48                                 539.99
Road-750 Black, 52                                 539.99

(14 row(s) affected)

These items can be purchased for less than $700.00.