当我传递 NULL 值时,COALESCE 函数不起作用,但在将变量声明为 NULL 时它有效



当我执行以下查询时,我正在获取输出,但是当我传递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 常量的参数。

你想实现什么目标?

最新更新