如果参数为空,则标量 UDF(请参阅CREATE FUNCTION )的选项“RETURNS NULL ON NULL INPUT”会停止执行函数体并简单地返回 NULL。
也就是说,它短路了。
有谁知道它如何处理多个参数?
将具有多个参数的函数调用短路会很有用,例如第一个参数是否至少为 NULL。
当我有时间时,我将使用分析器来尝试跟踪 udf 调用。我已经搜索过,但找不到任何东西.. 更有可能我没有使用正确的搜索词。
同时,有没有人有任何想法或经验?
也欢迎来自其他 RDBMS 世界的答案。这是一个 ANSI 设置,我在搜索中看到了 DB2 和 MySQL 的结果
编辑,基于评论:仅适用于非 CLR 函数
干杯小号
编辑:我不需要运行探查器。嗬!这演示了以下行为:
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