2013-07-22 126 views
-2

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 

根据我的理解,应该是在输出列表的最前方,因为在最开始就至少可以作为参数传递一个逗号。另外,如果我在第二个参数中加入一些值。正如我所预料的那样,它出现在最前面,而不是,

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

+2

您更好地解释清楚什么是你想达到和样本数据说明它 – peterm

+0

如果@ColmnValue为null,并且要添加“”到,那么结果仍在继续为NULL,在这种情况下,您将获得下一个合并值' –

+0

谢谢。我不知道SQL字符串连接的行为如此不同。 – lbrahim

回答

5

你的理解不正确。

聚焦表达:

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

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

你是有可能的思考:

SELECT @ColumnValue = COALESCE(@ColumnValue, '') + ',' + ColumnValue 
+1

谢谢先生,不厌其烦地回答我的问题。非常有见地的答案。 – lbrahim

5

你困惑。由于@ColumnValue最初为NULL,因此@ColumnValue + ','的结果也为NULL,所以COALESCE(@ColumnValue+',','')的结果为''。这是很容易与测试:

DECLARE @ColumnValue VARCHAR(MAX); 

SELECT COALESCE(@ColumnValue+',','') 
+1

谢谢!真的很有帮助。 – lbrahim