标量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
LukeH.. 9
是的,指定的函数RETURNS NULL ON NULL INPUT
如果有任何参数则会短路NULL
.
该文件确实表明这一点,虽然目前还不清楚,似乎是仅指CLR函数.(我认为这是微软试图澄清NULL
指定的行为CREATE FUNCTION
将覆盖OnNullCall
CLR方法的属性.)
我已经在SQL2005和SQL2008中使用非CLR函数对其进行了测试,并且它与预期完全短路.
是的,指定的函数RETURNS NULL ON NULL INPUT
如果有任何参数则会短路NULL
.
该文件确实表明这一点,虽然目前还不清楚,似乎是仅指CLR函数.(我认为这是微软试图澄清NULL
指定的行为CREATE FUNCTION
将覆盖OnNullCall
CLR方法的属性.)
我已经在SQL2005和SQL2008中使用非CLR函数对其进行了测试,并且它与预期完全短路.