SQL Server のストアドプロシージャとテーブル値関数で、オプション引数(省略可能な引数)を設定する方法です。ストアドプロシージャとテーブル値関数では呼び出し方が少しだけ異なるので注意が必要です。
オプション引数の設定
引数の後ろに規定値を書くだけです。
CREATE PROCEDURE [dbo].[Hoge1]
@PrefectureCd numeric(2, 0) = 13
AS
BEGIN
SELECT * FROM Customer WHERE Prefecture = @PrefectureCd
END
GO
呼び出し方
引数を渡す場合はいつも通りに書くだけです。省略しても問題はありません。
-- 省略した場合
exec Hoge1
-- 省略しない場合
exec Hoge1 14
テーブル値関数の設定
次に、テーブル値関数の場合です。
CREATE FUNCTION [dbo].[HogeTable1]
(
@PrefectureCd numeric(2, 0) = 13
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM Customer WHERE Prefecture = @PrefectureCd
)
GO
呼び出し方
省略する場合は、default (大文字でも可能) と付けます。
-- 省略した場合
select * from HogeTable1(default)
-- 省略しない場合
select * from HogeTable1(14)
まとめ
ストアドの場合は省略と言えますが、テーブル値関数の場合は省略とはいえないですね。もちろん C# などから呼び出す場合でも同じことになるので、テーブル値関数を使用している場合は注意が必要です。