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

Cannot understand why this works (coalesce)

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。我不明白为什么第一个有效而第二个无效。

第一个版本正在检查 @result 是否有 NULL,这是正确的,因为它以 NULL 开头。您的版本总是 return NULL,因为 @result 开始时是 NULL

代码未检查 Mobile 是否有 NULL

您还可以通过以下方式初始化该值:

DECLARE @result varchar(max) = '';

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

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

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

None 的查询曾经初始化过@result,这意味着在查询开始之前@result 的值为 NULL。

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