当我执行以下查询时,我得到了输出,但是当我传递NULL
参数时,它不起作用。
示例1:
DECLARE
@a int = NULL,
@b int = NULL,
@c int = NULL
SELECT COALESCE(@a, @b,@c)
GO
输出:NULL
示例2:
SELECT COALESCE(NULL, NULL,NULL)
GO
输出:COALESCE的至少一个参数必须为 不是NULL常量的表达式。
有人可以解释为什么示例1有效但示例2无效。
答案 0 :(得分:5)
我认为错误非常清楚:coalesce()
“需要”一个非常数参数,而不是NULL
。因此,语法对显式NULL
施加了简单的限制。请注意,此错误是编译时间错误,而不是 run 时间错误。
您的问题确实似乎是:“为什么要对显式NULL
而不是对变量进行检查?”因为它可以在编译阶段轻松进行检查。尽管编译器可以跟踪您的情况下的默认值,但是任何中间分配都会使该问题成为编译器无法解决的问题。因此,SQL Server只是说“我不知道变量是否为NULL
”,并且该语句可以正常编译。
答案 1 :(得分:1)
答案是从SQL Server返回的错误消息中。至少,COALESCE的参数之一必须是非NULL常量的表达式。
除了测试是否捕获了此错误之外,我无法想到一个原因,以便使用多个NULL值执行查询,在该查询中没有包含不是NULL常量的参数。
您想实现什么?