パラメータの既定値の指定

オプション パラメータの既定値を指定することによって、オプション パラメータを伴うストアド プロシージャを作成できます。このストアド プロシージャを実行した場合、他の値が指定されなければ既定値が使用されます。

既定値の指定が必要なのは、ストアド プロシージャの中で指定された既定値がパラメータにない場合に、ストアド プロシージャの実行時に呼び出し元プログラムからそのパラメータの値が渡されないと、システム エラーが返されるためです。

パラメータの既定値として適切に値を指定できない場合、パラメータの既定値として NULL を指定すると、ストアド プロシージャがパラメータの値なしで実行されたときに独自のメッセージを返すようにすることができます。

注意

既定値が空白または句読点を含む文字列の場合、または数字で始まる場合 (たとえば 6xxx)、単一引用符で囲む必要があります。

次の例で、@SalesPerson という 1 つの入力パラメータを伴う usp_GetSalesYTD プロシージャを作成します。このパラメータには既定値として NULL が割り当てられています。@SalesPerson パラメータに値を渡さずにストアド プロシージャを実行した場合にカスタム エラー メッセージを返すためのエラー処理ステートメントで NULL を使用します。

USE AdventureWorks2008R2;
GO
IF OBJECT_ID('Sales.uspGetSalesYTD', 'P') IS NOT NULL
    DROP PROCEDURE Sales.uspGetSalesYTD;
GO
CREATE PROCEDURE Sales.uspGetSalesYTD
@SalesPerson nvarchar(50) = NULL  -- NULL default value
AS 
    SET NOCOUNT ON; 

-- Validate the @SalesPerson parameter.
IF @SalesPerson IS NULL
BEGIN
   PRINT 'ERROR: You must specify the last name of the sales person.'
   RETURN
END
-- Get the sales for the specified sales person and 
-- assign it to the output parameter.
SELECT SalesYTD
FROM Sales.SalesPerson AS sp
JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
WHERE LastName = @SalesPerson;
RETURN
GO

次の例では、ストアド プロシージャを実行します。最初のステートメントは、入力値を渡さずにストアド プロシージャを実行します。その結果、ストアド プロシージャのエラー処理ステートメントによってカスタム エラー メッセージが返されます。2 番目のステートメントでは入力値を渡し、予期した結果セットが返されます。

-- Run the stored procedure without specifying an input value.
EXEC Sales.usp_GetSalesYTD;
GO
-- Run the stored procedure with an input value.
EXEC Sales.usp_GetSalesYTD N'Blythe';
GO

次の例では、@first@second、および @third の各パラメータにそれぞれ既定値を指定した my_proc プロシージャと、他のパラメータ値を使用してこのストアド プロシージャを実行したときに表示される値を示します。

IF OBJECT_ID('dbo.my_proc', 'P') IS NOT NULL
    DROP PROCEDURE dbo.my_proc;
GO
CREATE PROCEDURE dbo.my_proc
    @first int = NULL,  -- NULL default value
    @second int = 2,    -- Default value of 2
    @third int = 3      -- Default value of 3
AS 
    SET NOCOUNT ON;
    SELECT @first, @second, @third;
GO
EXECUTE dbo.my_proc; -- No parameters supplied
GO

以下に結果セットを示します。

NULL  2  3

EXECUTE dbo.my_proc 10, 20, 30;-- All parameters supplied
GO

以下に結果セットを示します。

10  20  30

EXECUTE dbo.my_proc @second = 500;  -- Only second parameter supplied by name
GO

以下に結果セットを示します。

NULL  500  3

EXECUTE dbo.my_proc 40, @third = 50 -- Only first and third parameters
                                    -- are supplied.

以下に結果セットを示します。

40  2  50