SQLServerでは独自に関数SQLServerの関数(ストアドファンクション)で引数を省略する方法を作成することができます。
関数(ストアドファンクション)には引数を持たせることができるのですが、その引数の値を指定せずにDEFAULT(規定値)で実行することもできます。
今回は作成した関数の引数を指定しない(省略する)方法を解説します。
SQLServerの関数で引数を省略する方法
SQLServerでプログラミング言語(T-SQL)を使って作成できる処理はストアドプロシジャーと関数の2種類があります。
ストアドプロシージャーと関数では引数を省略する方法が違うので、ストアドプロシージャーでの省略する方法は以下の記事を参照してください。
[st-card id=804]
関数で引数を省略する方法
関数で引数を省略するするには関数側の宣言で、その引数のDEFAUT(規定値)を指定します。
(実はストアドプロシージャーと同じですが・・・)
CREATE FUNCTION [dbo].[param_test] ( @param1 AS VARCHAR( MAX ) = '規定値1' --指定されなければ「規定値1」が使われる ,@param2 AS VARCHAR( MAX ) = '規定値2' --指定されなければ「規定値2」が使われる ) RETURNS @out_table TABLE ( param1 VARCHAR( MAX ) ,param2 VARCHAR( MAX ) ) AS BEGIN INSERT INTO @out_table ( param1 ,param2 ) VALUES( @param1 ,@param2 ) RETURN END
このように引数の宣言に値(規定値)を設定します。
関数はこれで良いのですが、問題は呼び出す側です。
この関数をストアドプロシージャーの要領で普通に呼び出すと
メッセージ 313、レベル 16、状態 3、行 6 プロシージャまたは関数 param_test に指定された引数が不足しています。
というエラーが表示されます。
実は関数の引数の場合は完全に省略できるわけではなくて、本来値を指定する位置に「DEFAULT」という記述が必要です。
SELECT * FROM param_test( 'param1', DEFAULT )
param1 規定値2
上記のSQLを実行するとちゃんと1番目は渡した引数、2番目は規定値でテーブルが返されてきます。
まとめ
SQLServerの関数の引数の省略はストアドプロシージャーと違って、省略する引数の位置に「DEAFULT」というキーワードを書く必要があります。
以上、「SQLServerの関数(ストアドファンクション)で引数を省略する方法」でした。