web-dev-qa-db-ja.com

SQL Serverストアドプロシージャのオプションパラメータ?

SQL Server 2008でいくつかのストアドプロシージャを書いていますが、ここでオプションの入力パラメーターの概念が可能かどうか疑問に思いました。

使用したくないパラメーターには常にNULLを渡し、ストアドプロシージャの値を確認し、そこから物を取り出すことができると思いますが、概念がここにあるかどうかに興味がありました。ありがとう!

105
larryq

このように宣言できます

CREATE PROCEDURE MyProcName
    @Parameter1 INT = 1,
    @Parameter2 VARCHAR (100) = 'StringValue',
    @Parameter3 VARCHAR (100) = NULL
AS

/* check for the NULL / default value (indicating nothing was passed */
if (@Parameter3 IS NULL)
BEGIN
    /* whatever code you desire for a missing parameter*/
    INSERT INTO ........
END

/* and use it in the query as so*/
SELECT *
FROM Table
WHERE Column = @Parameter
178
Raj More

はい、そうです。パラメーターを次のように宣言します。

@Sort varchar(50) = NULL

パラメータを渡す必要さえありません。デフォルトでNULL(またはデフォルトで選択したもの)になります。

49
Mike Cole

2014年以降、少なくともデフォルトを設定でき、そのパラメーターを渡さない場合はエラーが発生し、エラーは発生しません。部分的な例:3番目のパラメーターはオプションとして追加されます。最初の2つのパラメーターのみを使用した実際の手順のexecは正常に機能しました

exec getlist 47,1,0

create procedure getlist
   @convId int,
   @SortOrder int,
   @contestantsOnly bit = 0
as
0
billpennock