当我执行以下查询时,我得到输出,但是当我通过NULL
参数,它不起作用。
示例1:
DECLARE
@a int = NULL,
@b int = NULL,
@c int = NULL
SELECT COALESCE(@a, @b,@c)
GO
输出:空
示例2:
SELECT COALESCE(NULL, NULL,NULL)
GO
输出: COALESCE 的至少一个参数必须是
表达式不是 NULL 常量。
有人可以解释一下为什么示例 1 有效但示例 2 无效。
我认为这个错误非常明显:coalesce()
“需要”一个非常量参数,但不是NULL
。因此,语法对显式施加了简单的限制NULL
s。请注意,此错误是compile-时间错误,不是run-时间错误。
你的问题似乎是:“为什么它要对显式进行检查NULL
但不是变量?”因为它可以在编译阶段轻松地进行检查。虽然compiler可以跟踪您的情况的默认值,任何中间赋值都会使问题成为编译器无法解决的问题。因此,SQL Server 只是说“我不知道变量是否是NULL
或不”,并且该语句编译良好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)