2011-01-27 32 views
33

我得到的結果在SQL Server作爲轉換SQL Server的結果集到字符串

SELECT StudentId FROM Student WHERE condition = xyz 

我越來越喜歡

 
StudentId 
1236 

7656 

8990 
........ 

存儲過程的輸出參數輸出爲@studentId字符串我想要返回語句爲

1236, 7656, 8990. 

如何將輸出轉換爲單串?

我正在返回單列[即。 StudentId]

回答

32

測試此:

DECLARE @result NVARCHAR(MAX) 

SELECT @result = STUFF(
         ( SELECT ',' + CONVERT(NVARCHAR(20), StudentId) 
          FROM Student 
          WHERE condition = abc 
          FOR xml path('') 
         ) 
         , 1 
         , 1 
         , '') 
49
DECLARE @result varchar(1000) 

SET @result = '' 

SELECT @result = @result + StudentId + ',' FROM Student WHERE condition = xyz 

select substring(@result, 0, len(@result) - 1) --trim extra "," at end 
+2

我只是嘗試這樣的代碼和它的作品。只是輕微的調整: 選擇子字符串(@result,1,len(@result)-1)刪除多餘的「,」 – Eden 2012-11-19 10:23:18

+2

嘗試了這一點,最後一行在SQL Server 2008中無法正常工作。'substring(@result ,1,len(@result))`刪除尾部逗號,而上面的版本刪除逗號前的字符。 :) – async 2014-05-29 12:06:09

7

這兩個答案都是有效的,但不要忘了initializate變量的值,默認情況下爲NULL,並與T-SQL:

NULL + "Any text" => NULL 

這是一個非常常見的錯誤,不要忘記它!

而且是好主意,使用ISNULL函數:

SELECT @result = @result + ISNULL(StudentId + ',', '') FROM Student 
0

或一個SELECT語句...

DECLARE @results VarChar(1000) 
SELECT @results = CASE 
    WHEN @results IS NULL THEN CONVERT(VarChar(20), [StudentId]) 
    ELSE ', ' + CONVERT(VarChar(20), [StudentId]) 
    END 
FROM Student WHERE condition = abc; 
6

使用COALESCE功能:

DECLARE @StudentID VARCHAR(1000) 
SELECT @StudentID = COALESCE(@StudentID + ',', '') + StudentID 
FROM Student 
WHERE StudentID IS NOT NULL and Condition='XYZ' 
select @StudentID 
0

該函數與表中的NULL值一起工作,並且在末尾不需要子字符串操作。 COALESCE在表中的NULL值不太好(如果它們在那裏的話)。

DECLARE @results VARCHAR(1000) = '' 
SELECT @results = @results + 
      ISNULL(CASE WHEN LEN(@results) = 0 THEN '' ELSE ',' END + [StudentId], '') 
FROM Student WHERE condition = xyz 

select @results 
1

使用CONCAT功能,避免轉換錯誤:

DECLARE @StudentID VARCHAR(1000) 
SELECT @StudentID = CONCAT(COALESCE(@StudentID + ',', ''), StudentID) 
FROM Student 
WHERE StudentID IS NOT NULL and Condition='XYZ' 
select @StudentID 
相關問題