ISNULL和COALESCE虽然相同,但行为可能不同。涉及具有非空参数的ISNULL的表达式被认为是NOT NULL,而涉及具有非空参数的COALESCE的表达式被认为是NULL。
答案 0 :(得分:5)
它决定了使用ISNULL或COALESCE的计算列的可空性
RowCheckSum AS COALESCE(...)
...表示RowCheckSum
列定义包含NULL
个关键字,
RowCheckSum2 AS ISNULL(...)
...有NOT NULL
定义。
这也意味着,在结果集中,第一个字段可以返回NULL
个值,第二个字段也不能返回。
答案 1 :(得分:3)
Create view dbo.pdtest
as
Select
ISNULL(GETDATE(), GETDATE()) as test1,
coalesce(GETDATE(), getdate()) as test2
go
Create view dbo.pdtest2
as
Select
ISNULL(GETDATE(), GETDATE()) as test1,
coalesce(GETDATE(), getdate(), null) as test2
当您查看视图列的定义时(在管理工作室中说),pdTest上的定义将列显示为
DateTime not null,
DateTime not null.
在pdtest2上,定义是
DateTime Not Null,
DateTime Null.
如果你再添加第三个视图;其中isnull语句被评估为null
Create view dbo.pdtest3
as
Select
ISNULL(GETDATE(), null) as test1,
coalesce(GETDATE(), getdate(), null) as test2
视图数据的定义仍然不是Null,Null。