我有一些非常奇怪的行爲與coalesce。當我不指定返回量(TOP 50)我只得到一個最後的結果,但如果我刪除「排序」它工作...下面的例子使用訂單時COALESCE的奇怪的TSQL行爲通過
DECLARE @result varchar(MAX)
SELECT @result = COALESCE(@result + ',', '') + [Title]
FROM Episodes WHERE [SeriesID] = '1480684' AND [Season] = '1' Order by [Episode] ASC
SELECT @result
只返回一個最後的結果:
溼婆碗
,但如果我specifiy一個最大的回報量(只增加TOP(50)以相同的語句)
DECLARE @result varchar(MAX)
SELECT TOP(50) @result = COALESCE(@result + ',', '') + [Title]
FROM Episodes WHERE [SeriesID] = '1480684' AND [Season] = '1' Order by [Episode] ASC
SELECT @result
我得到的所有結果以正確的順序
草案中彈跳測試,週日在如心的,先生。 McGibblets,平常的賭注,溼婆碗
罪魁禍首似乎是[標題]列,就好像我返回一個不同的列似乎沒有指定返回限制。 FYI [Title]是一個VARCHAR(MAX)NOT NULL列。
任何洞察什麼可能導致此?我真的不想設置限制,但它是目前返回的所有數據的唯一途徑...感謝
這是未註釋的黑客,你不應該那樣做。有一些標準的方法可以用xml來做到這一點。 –
這就是我們爲'XML Path()'將行連接成單個字符串的原因 –
[Demo](http://sqlfiddle.com/#!6/76d79/2/0) – lad2025