T-SQL: パラメーターの既定値 (Default) のあるユーザー定義関数を実行する際の注意点
パラメーターの既定値 (Default)
ストアードプロシージャやユーザー定義関数に、デフォルトの入力引数(インプットパラメーター)を設定したいような時ありますよね。
ストアードプロシージャとユーザー定義関数では、デフォルトの指定の仕方は同じですが、呼び出す際の方法が違います。
パラメーターの既定値 (Default)の定義方法とその実行方法について、見てみましょう。
パラメーターの既定値 (Default)を定義する方法
デフォルトの値を定義するには、引数を定義した後ろに続けて = [既定値] のように指定します。
例えば次のような感じです。
[ユーザー定義関数の例]
[ストアードプロシージャの例]
上の例では、実行時に 2 個目の引数である @Input2 に値が渡された時は、その渡された値が使われ、渡されなかった場合は 2 が使われます。
パラメーターの既定値のあるストアードプロシージャを実行する方法
ストアードプロシージャとユーザー定義関数では、デフォルト値の定義の方法は同じでしたが、デフォルト値を使って実行する際の方法が違います。
パラメーターの既定値のあるストアードプロシージャは次のように実行できます。
上の二つは @Input2 に 5 を指定して実行しているので、結果は 6 になっています。
下の二つは @Input2 を指定せずに実行しているおんで、デフォルト値の 2 が使われ、結果は 3 になっていますね。
パラメーターの既定値のあるユーザー定義関数を実行する方法
次に、パラメーターの既定値のあるユーザー定義関数を実行する方法です。
デフォルト値を使わないで、@Input1 と @Input2 の両方を指定して実行する方法は次の通りです。
デフォルト値を使って実行する際ですが、ストアードプロシージャの時の感じで省略してしまうと、次のように 「プロシージャまたは関数 * に指定された引数が不足しています。」 というエラーになります。
ユーザー定義関数で、デフォルト値を使って実行したい時は、DEFAULT というキーワードを指定しなければなりません。
ストアードプロシージャと違うので、後でユーザー定義関数に引数を追加することになった時などに、デフォルト値を指定しても、呼ぶ側の変更も必要になるので注意してください。
DEFAULT を指定せずにデフォルト値を使ってユーザー定義関数を実行する方法
私はあまりこの形でユーザー定義関数を使う機会がないのですが、DEFAULT を指定せずにデフォルト値を使ってユーザー定義関数を実行することも可能です。
EXEC を使って次のようにユーザー定義関数を実行すると、DEFAULT というキーワードを指定せずにデフォルト値を使うことができます。