T-SQL: パラメーターの既定値 (Default) のあるユーザー定義関数を実行する際の注意点

パラメーターの既定値 (Default)

ストアードプロシージャやユーザー定義関数に、デフォルトの入力引数(インプットパラメーター)を設定したいような時ありますよね。

ストアードプロシージャとユーザー定義関数では、デフォルトの指定の仕方は同じですが、呼び出す際の方法が違います。

パラメーターの既定値 (Default)の定義方法とその実行方法について、見てみましょう。


パラメーターの既定値 (Default)を定義する方法

デフォルトの値を定義するには、引数を定義した後ろに続けて = [既定値] のように指定します。

例えば次のような感じです。

[ユーザー定義関数の例]
パラメーターの既定値 (Default)を定義する方法 1

[ストアードプロシージャの例]
パラメーターの既定値 (Default)を定義する方法 2

上の例では、実行時に 2 個目の引数である @Input2 に値が渡された時は、その渡された値が使われ、渡されなかった場合は 2 が使われます。

パラメーターの既定値のあるストアードプロシージャを実行する方法

ストアードプロシージャとユーザー定義関数では、デフォルト値の定義の方法は同じでしたが、デフォルト値を使って実行する際の方法が違います。

パラメーターの既定値のあるストアードプロシージャは次のように実行できます。

パラメーターの既定値のあるユーザー定義関数を実行する方法 3

上の二つは @Input2 に 5 を指定して実行しているので、結果は 6 になっています。

下の二つは @Input2 を指定せずに実行しているおんで、デフォルト値の 2 が使われ、結果は 3 になっていますね。


パラメーターの既定値のあるユーザー定義関数を実行する方法

次に、パラメーターの既定値のあるユーザー定義関数を実行する方法です。

デフォルト値を使わないで、@Input1 と @Input2 の両方を指定して実行する方法は次の通りです。

パラメーターの既定値のあるユーザー定義関数を実行する方法 4


デフォルト値を使って実行する際ですが、ストアードプロシージャの時の感じで省略してしまうと、次のように 「プロシージャまたは関数 * に指定された引数が不足しています。」 というエラーになります。

パラメーターの既定値のあるユーザー定義関数を実行する方法 5


ユーザー定義関数で、デフォルト値を使って実行したい時は、DEFAULT というキーワードを指定しなければなりません。

パラメーターの既定値のあるユーザー定義関数を実行する方法 6

ストアードプロシージャと違うので、後でユーザー定義関数に引数を追加することになった時などに、デフォルト値を指定しても、呼ぶ側の変更も必要になるので注意してください。


DEFAULT を指定せずにデフォルト値を使ってユーザー定義関数を実行する方法

私はあまりこの形でユーザー定義関数を使う機会がないのですが、DEFAULT を指定せずにデフォルト値を使ってユーザー定義関数を実行することも可能です。

EXEC を使って次のようにユーザー定義関数を実行すると、DEFAULT というキーワードを指定せずにデフォルト値を使うことができます。

パラメーターの既定値のあるユーザー定義関数を実行する方法 7


© 2010-2024 SQL Server 入門