T-SQL:COALESCE文档中的这段内容是什么意思?

时间:2010-12-24 04:04:47

标签: sql-server tsql

  

ISNULL和COALESCE虽然相同,但行为可能不同。涉及具有非空参数的ISNULL的表达式被认为是NOT NULL,而涉及具有非空参数的COALESCE的表达式被认为是NULL。

http://msdn.microsoft.com/en-us/library/ms190349.aspx

2 个答案:

答案 0 :(得分:5)

它决定了使用ISNULL或COALESCE的计算列的可空性

RowCheckSum AS COALESCE(...)

...表示RowCheckSum列定义包含NULL个关键字,

RowCheckSum2 AS ISNULL(...)

...有NOT NULL定义。

这也意味着,在结果集中,第一个字段可以返回NULL个值,第二个字段也不能返回。

答案 1 :(得分:3)

措辞严厉;它试图说IsNull总是评估为默认的非空列;而Coalesce可以评估为默认值Null。

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。