Coalesce will return the first non-null value among its arguments
文档说。我也可以像下面这样使用它:
DECLARE @ColumnValue VARCHAR(MAX);
SELECT @ColumnValue = COALESCE(@ColumnValue+',','') + ColumnValue
FROM dbo.TableA
SELECT @ColumnValue
根据我的理解,输出列表的最前面应该有一个,
,因为从一开始,至少会有一个逗号作为参数传递。另外,如果我在第二个参数中加入一些值。它出现在最前面,而不是我预期的,
。
如果有人可以请我解释一下代码。我将非常感激。
答案 0 :(得分:5)
您的理解不正确。
专注于表达:
SELECT @ColumnValue = COALESCE(@ColumnValue+',','') + ColumnValue
-------------------------------^XXXXXXXXXXXXXXX
COALESCE()
的第一个参数是@ColumnValue+','
。最初为NULL,因此它被''
替换。然后ColumnValue
作为列表中的第一个元素。
您可能会想:
SELECT @ColumnValue = COALESCE(@ColumnValue, '') + ',' + ColumnValue
答案 1 :(得分:5)
@ColumnValue
为NULL
,因此@ColumnValue + ','
的结果也为NULL
,因此COALESCE(@ColumnValue+',','')
的结果为''
。这很容易测试:
DECLARE @ColumnValue VARCHAR(MAX);
SELECT COALESCE(@ColumnValue+',','')