当我传递NULL值时,COALESCE函数不起作用,但是当声明变量为NULL时它可以工作

Bim*_*Das 1 sql sql-server

当我执行以下查询时,我得到输出,但是当我传递NULL参数时,它不起作用.

例1:

DECLARE 
@a int = NULL,
@b int = NULL,
@c int = NULL
SELECT COALESCE(@a, @b,@c)
GO
Run Code Online (Sandbox Code Playgroud)

输出:NULL

例2:

SELECT COALESCE(NULL, NULL,NULL)
GO
Run Code Online (Sandbox Code Playgroud)

输出:COALESCE的至少一个参数必须是不是NULL常量的表达式.

有人可以解释,为什么示例1正在工作,但示例2没有.

Gor*_*off 5

我认为错误非常明确: coalesce()"需要"一个非常数的非常数参数NULL.因此,语法对显式NULLs 施加了简单的限制.请注意,此错误是编译时错误,而不是运行时错误.

你的问题似乎是:"为什么要对显式NULLs 进行检查而不对变量进行检查?" 因为它可以在编译阶段轻松完成检查.虽然编译器可以跟踪您的情况下的默认值,但任何中间分配都会使问题成为编译器无法做到的事情.因此,SQL Server只是简单地说"我不知道变量是否NULL存在",并且语句编译得很好.