-1

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

根据我的理解,,输出列表的最前面应该有一个,因为一开始至少会有一个逗号作为参数传递。另外,如果我在第二个参数中添加一些值。它出现在最前面,而不是,我预期的。

如果有人可以请向我解释代码。我将不胜感激。

4

2 回答 2

8

你的理解不正确。

专注于表达:

SELECT @ColumnValue = COALESCE(@ColumnValue+',','') + ColumnValue
-------------------------------^XXXXXXXXXXXXXXX

的第一个参数COALESCE()@ColumnValue+','。这最初是 NULL,所以它被替换为''. 然后ColumnValue作为列表中的第一个元素出现。

你可能会想到:

SELECT @ColumnValue = COALESCE(@ColumnValue, '') + ',' + ColumnValue
于 2013-07-22T20:55:43.953 回答
6

你很困惑。既然一开始@ColumnValueNULL,那么结果@ColumnValue + ','也是NULL,所以结果COALESCE(@ColumnValue+',','')''。这很容易通过以下方式进行测试:

DECLARE @ColumnValue VARCHAR(MAX);

SELECT COALESCE(@ColumnValue+',','')
于 2013-07-22T20:55:49.023 回答