2013-07-22 192 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