SQLServerの関数(ストアドファンクション)で引数を省略する方法

記事内に広告が含まれています。

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の関数(ストアドファンクション)で引数を省略する方法」でした。

タイトルとURLをコピーしました