将SQL Server结果集转换为字符串

Zer*_*ity 42 sql t-sql sql-server sql-server-2005

我在SQL Server中得到的结果为

SELECT StudentId FROM Student WHERE condition = xyz
Run Code Online (Sandbox Code Playgroud)

我得到的输出就像

StudentId
1236

7656

8990
........

存储过程的输出参数是@studentId字符串,我希望return语句为

1236, 7656, 8990.
Run Code Online (Sandbox Code Playgroud)

如何在单个字符串中转换输出?

我正在返回单列[即.学生卡]

Bon*_*ton 58

DECLARE @result varchar(1000)

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

select substring(@result, 0, len(@result) - 1) --trim extra "," at end
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚试过这段代码,但它确实有效.只是微调:选择substring(@result,1,len(@result)-1)删除额外的"," (2认同)
  • 尝试了这一点,最后一行在SQL Server 2008中无法正常工作.`substring(@result,1,len(@result))`删除尾随逗号,而上面的版本也删除逗号之前的字符.:) (2认同)
  • 应该是 `substring(@result, 1, len(@result) - 1)` http://msdn.microsoft.com/en-GB/library/ms187748.aspx (2认同)

ABI*_*ABI 48

测试一下:

 DECLARE @result NVARCHAR(MAX)

 SELECT @result = STUFF(
                        (   SELECT ',' + CONVERT(NVARCHAR(20), StudentId) 
                            FROM Student 
                            WHERE condition = abc 
                            FOR xml path('')
                        )
                        , 1
                        , 1
                        , '')
Run Code Online (Sandbox Code Playgroud)


小智 9

使用COALESCE功能:

DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = COALESCE(@StudentID + ',', '') + StudentID
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 7

这两个答案都是有效的,但不要忘记初始化变量的值,默认为NULL并使用T-SQL:

NULL + "Any text" => NULL
Run Code Online (Sandbox Code Playgroud)

这是一个非常常见的错误,不要忘记它!

使用ISNULL功能也是个好主意:

SELECT @result = @result + ISNULL(StudentId + ',', '') FROM Student
Run Code Online (Sandbox Code Playgroud)

  • 参考“两个答案”是无用的,因为答案会四处移动并且超过 2 个。 (2认同)

pis*_*ete 6

使用该CONCAT函数可以避免转换错误:

DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = CONCAT(COALESCE(@StudentID + ',', ''), StudentID)
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
Run Code Online (Sandbox Code Playgroud)