无法理解为什么这样有效(合并)

时间:2015-01-07 12:03:49

标签: sql sql-server tsql

DECLARE @result varchar(max)

SELECT    
    @result = coalesce(@result + ',', '') + Mobile
FROM    
    VMembers
WHERE   
    CommitteesID = 45

我认为如果检查Mobile的null,则应该是

DECLARE @result varchar(max)

SELECT    
    @result = @result + ISNULL(Mobile + ',', '')
FROM    
    VMembers
WHERE   
    CommitteesID = 45

但这总是产生@result = NULL。我不明白为什么第一个有效,而第二个无效。

2 个答案:

答案 0 :(得分:1)

第一个版本正在检查@result NULL,这是正确的,因为它从NULL开始。您的版本将始终返回NULL,因为@resultNULL开头。

代码未检查Mobile的{​​{1}}。

您还可以通过执行以下操作来初始化值:

NULL

但是,这会在字符串的开头添加一个不必要的逗号。

让我注意:这不是我做字符串聚合的首选方法,但似乎确实有效。

答案 1 :(得分:1)

您的查询都没有初始化@result,这意味着@result在查询开始之前的值为NULL。

在第一个查询中,这由@result在COALESCE语句中处理,该语句输出''当@result为NULL时。这不会发生在第二个查询中,因此输出将始终为NULL(请记住,在连接字符串时,NULL +'无论'总是等于NULL)。