スカラー UDF のオプション "RETURNS NULL ON NULL INPUT" ( CREATE FUNCTIONを参照) は、パラメーターが null の場合、関数本体の実行を停止し、単に NULL を返します。
つまり、短絡します。
複数のパラメータを処理する方法を知っている人はいますか?
最初のパラメーターが少なくとも NULL の場合など、複数のパラメーターを使用して関数呼び出しを短絡すると便利です。
時間があれば、プロファイラーを使用して udf 呼び出しを追跡してみます。検索しましたが、何も見つかりません。おそらく、正しい検索用語を使用していない可能性があります。
それまでの間、誰かアイデアや経験をお持ちですか?
他の RDBMS ワールドからの回答も歓迎します。これは ANSI 設定であり、検索で DB2 と MySQL の結果が表示されました。
コメントに基づいて編集: 非 CLR 関数のみ
乾杯S
編集: プロファイラーを実行する必要はありません。どっ!これは動作を示しています。
CREATE FUNCTION dbo.ufnTest (
@dummy tinyint
)
RETURNS tinyint
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
RETURN 1
END
GO
SELECT dbo.ufnTest(0), dbo.ufnTest(NULL)
GO
ALTER FUNCTION dbo.ufnTest (
@dummy tinyint
)
RETURNS tinyint
--WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
RETURN 1
END
GO
SELECT dbo.ufnTest(0), dbo.ufnTest(NULL)
GO
ALTER FUNCTION dbo.ufnTest (
@dummy tinyint,
@dummy2 tinyint
)
RETURNS tinyint
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
RETURN 1
END
GO
SELECT dbo.ufnTest(0, 2), dbo.ufnTest(NULL, 2), dbo.ufnTest(0, NULL)
GO
ALTER FUNCTION dbo.ufnTest (
@dummy tinyint,
@dummy2 tinyint
)
RETURNS tinyint
--WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
RETURN 1
END
GO
SELECT dbo.ufnTest(0, 2), dbo.ufnTest(NULL, 2), dbo.ufnTest(0, NULL)
GO