2013-07-24 42 views
2

我使用以下代碼創建逗號分隔列表。 我想要的清單的順序perticular爲了使用SELECT子句的逗號分隔列表中的ORDER BY

USE AdventureWorks 
GO 
DECLARE @listStr VARCHAR(MAX) 
SELECT @listStr = COALESCE(@listStr+',' ,'') + Name 
FROM Production.Product 
SELECT @listStr 
GO 

當我試圖像

USE AdventureWorks 
GO 
DECLARE @listStr VARCHAR(MAX) 
SELECT @listStr = COALESCE(@listStr+',' ,'') + Name 
FROM Production.Product 
ORDER BY sortOrder 
SELECT @listStr 
GO 

它顯示錯誤incorrect syntax near ' ORDER'

+0

什麼是sortOrder?它沒有在任何地方定義,也不在表中 –

+0

sortOrder是我的表中的列名稱 –

+0

請確保您的文本中沒有任何無效字符。無效字符可能來自代碼的複製粘貼,並且可能顯示爲「空格」,但實際上並不是解釋器看到的。 –

回答

8

使用STUFF(),它爲您提供了幾乎所有你看到的,似乎是正確的,或者已被複制,並從某處粘貼腳本「不正確的語法附近」每次都在同逗號分隔的結果

USE AdventureWorks 
GO 
DECLARE @listStr VARCHAR(MAX) 

SELECT @listStr = STUFF((SELECT ',' + Name 
      FROM Production.Product 
      ORDER BY sortOrder 
     FOR XML PATH('')), 1, 1, '') 

SELECT @listStr 
GO 
+1

STUFF只是用空字符串替換第一個',',它的FOR XML子句創建了一個以逗號分隔的列表。 –

0

我不相信你可以通過獲取時把訂單標量值。你不應該需要它,因爲你只有一個值。

+0

我在問'@ listStr'變量中的值的排序順序 –

+0

對不起,現在看。 – asantaballa

-1

否則,您可能在文本中看不到無效的字符,並且顯示爲空白。 我的建議是打開一個新窗口並手動重新鍵入整個查詢,或嘗試猜測無效字符的清理位置。