我想select Column from Table使用SQL Server 将结果返回到逗号分隔的字符串中.
有问题的列相当大(nvarchar(2000)),因此解决方案必须能够处理非常大的结果值.
Mar*_*ell 28
DECLARE @result nvarchar(max)
SET @result = ''
SELECT @result = @result + [Column] + N','
FROM [TABLE]
--TODO: trim last ',' if you require
PRINT @result
Run Code Online (Sandbox Code Playgroud)
如果Column可以为null,则先排除它,或使用ISNULL/ COALESCE- 否则单个NULL将中断整个序列.用以下方法排除它更有效WHERE:
SELECT @result = @result + [Column] + N','
FROM [TABLE]
WHERE [Column] IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
Mic*_*uen 10
没有尾随逗号版本:
declare @s varchar(max);
select @s = isnull(@s + ', ' + lastname, lastname)
from person
order by lastname;
print @s;
Run Code Online (Sandbox Code Playgroud)
我在建议的答案中讨论的方法有问题。我从 SQLAuthority 获取了代码。但是如果您有问题建议的解决方案,这每次都有效
SELECT SUBSTRING(
(SELECT ',' + s.ColumnName
FROM dbo.table s
ORDER BY s.ColumnName
FOR XML PATH('')),2,200000) AS CSV
GO
Run Code Online (Sandbox Code Playgroud)
在SQL 2017中添加了STRING_AGG
https://docs.microsoft.com/zh-cn/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017
SELECT STRING_AGG (ColumnName, ',') AS csv
FROM TableName
GROUP BY ColumnName2
Run Code Online (Sandbox Code Playgroud)