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
。我不明白为什么第一个有效,而第二个无效。
答案 0 :(得分:1)
第一个版本正在检查@result
NULL
,这是正确的,因为它从NULL
开始。您的版本将始终返回NULL,因为@result
以NULL
开头。
代码未检查Mobile
的{{1}}。
您还可以通过执行以下操作来初始化值:
NULL
但是,这会在字符串的开头添加一个不必要的逗号。
让我注意:这不是我做字符串聚合的首选方法,但似乎确实有效。
答案 1 :(得分:1)
您的查询都没有初始化@result,这意味着@result在查询开始之前的值为NULL。
在第一个查询中,这由@result在COALESCE
语句中处理,该语句输出''当@result为NULL时。这不会发生在第二个查询中,因此输出将始终为NULL(请记住,在连接字符串时,NULL +'无论'总是等于NULL)。