当前位置:  开发笔记 > 编程语言 > 正文

MSSQL上标量UDF中的NULL参数

如何解决《MSSQL上标量UDF中的NULL参数》经验,为你挑选了1个好方法。

标量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将覆盖OnNullCallCLR方法的属性.)

我已经在SQL2005和SQL2008中使用非CLR函数对其进行了测试,并且它与预期完全短路.



1> LukeH..:

是的,指定的函数RETURNS NULL ON NULL INPUT如果有任何参数则会短路NULL.

该文件确实表明这一点,虽然目前还不清楚,似乎是仅指CLR函数.(我认为这是微软试图澄清NULL指定的行为CREATE FUNCTION将覆盖OnNullCallCLR方法的属性.)

我已经在SQL2005和SQL2008中使用非CLR函数对其进行了测试,并且它与预期完全短路.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有