当我执行以下查询时,我得到输出,但是当我传递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没有.
我认为错误非常明确: coalesce()"需要"一个非常数的非常数参数NULL.因此,语法对显式NULLs 施加了简单的限制.请注意,此错误是编译时错误,而不是运行时错误.
你的问题似乎是:"为什么要对显式NULLs 进行检查而不对变量进行检查?" 因为它可以在编译阶段轻松完成检查.虽然编译器可以跟踪您的情况下的默认值,但任何中间分配都会使问题成为编译器无法做到的事情.因此,SQL Server只是简单地说"我不知道变量是否NULL存在",并且语句编译得很好.
| 归档时间: |
|
| 查看次数: |
420 次 |
| 最近记录: |