当前位置:  开发笔记 > 数据库 > 正文

如何在不使用游标的情况下将表的一列转换为SQL Server中的csv字符串

如何解决《如何在不使用游标的情况下将表的一列转换为SQLServer中的csv字符串》经验,为你挑选了3个好方法。

我想select Column from Table使用SQL Server 将结果返回到逗号分隔的字符串中.

有问题的列相当大(nvarchar(2000)),因此解决方案必须能够处理非常大的结果值.



1> Marc Gravell..:
DECLARE @result nvarchar(max)
SET @result = ''

SELECT @result = @result + [Column] + N','
FROM [TABLE]

--TODO: trim last ',' if you require

PRINT @result

如果Column可以为null,则先排除它,或使用ISNULL/ COALESCE- 否则单个NULL将中断整个序列.用以下方法排除它更有效WHERE:

SELECT @result = @result + [Column] + N','
FROM [TABLE]
WHERE [Column] IS NOT NULL


SELECT @result = COALESCE(@result + N',',N'')+ [Column]将避免最后一个没有perf惩罚的逗号.
像宣传的那样工作.谢谢.对于那些以后可能会发现这个的人来说,很容易敲掉最后一个逗号:`select @result = substring(@result,1,(LEN(@result)-1))

2> Michael Buen..:

没有尾随逗号版本:

declare @s varchar(max);

select @s = isnull(@s + ', ' + lastname, lastname)
from person
order by lastname;

print @s;



3> 小智..:

在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

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有