我得到的結果在SQL Server作爲轉換SQL Server的結果集到字符串
SELECT StudentId FROM Student WHERE condition = xyz
我越來越喜歡
StudentId 1236 7656 8990 ........
存儲過程的輸出參數輸出爲@studentId
字符串我想要返回語句爲
1236, 7656, 8990.
如何將輸出轉換爲單串?
我正在返回單列[即。 StudentId]
我得到的結果在SQL Server作爲轉換SQL Server的結果集到字符串
SELECT StudentId FROM Student WHERE condition = xyz
我越來越喜歡
StudentId 1236 7656 8990 ........
存儲過程的輸出參數輸出爲@studentId
字符串我想要返回語句爲
1236, 7656, 8990.
如何將輸出轉換爲單串?
我正在返回單列[即。 StudentId]
測試此:
DECLARE @result NVARCHAR(MAX)
SELECT @result = STUFF(
( SELECT ',' + CONVERT(NVARCHAR(20), StudentId)
FROM Student
WHERE condition = abc
FOR xml path('')
)
, 1
, 1
, '')
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
這兩個答案都是有效的,但不要忘了initializate變量的值,默認情況下爲NULL,並與T-SQL:
NULL + "Any text" => NULL
這是一個非常常見的錯誤,不要忘記它!
而且是好主意,使用ISNULL函數:
SELECT @result = @result + ISNULL(StudentId + ',', '') FROM Student
或一個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;
使用COALESCE
功能:
DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = COALESCE(@StudentID + ',', '') + StudentID
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
該函數與表中的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
使用CONCAT
功能,避免轉換錯誤:
DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = CONCAT(COALESCE(@StudentID + ',', ''), StudentID)
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
我只是嘗試這樣的代碼和它的作品。只是輕微的調整: 選擇子字符串(@result,1,len(@result)-1)刪除多餘的「,」 – Eden 2012-11-19 10:23:18
嘗試了這一點,最後一行在SQL Server 2008中無法正常工作。'substring(@result ,1,len(@result))`刪除尾部逗號,而上面的版本刪除逗號前的字符。 :) – async 2014-05-29 12:06:09