当我执行以下查询时,我正在获取输出,但是当我传递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
施加了简单的限制。 请注意,此错误是编译时错误,而不是运行时错误。
你的问题似乎是:"为什么它对显式NULL
而不是变量进行检查? 因为它可以在编译阶段轻松进行检查。 尽管编译器可以跟踪您情况下的默认值,但任何中间赋值都会使问题成为编译器无法执行的操作。 因此,SQL Server只是简单地说"我不知道变量是否NULL
",并且该语句编译良好。
答案在从 SQL Server 返回的错误消息中。 COALESCE 的参数中至少有一个必须是不是 NULL 常量的表达式。
我想不出一个原因,除了测试此错误是否被捕获,使用多个 NULL 值执行查询,其中没有包含不是 NULL 常量的参数。
你想实现什么目标?