【问题标题】:How do I get a comma delimited result from result set without using parameters如何在不使用参数的情况下从结果集中获取逗号分隔的结果
【发布时间】:2011-12-13 14:53:42
【问题描述】:

如何从以下不带参数的示例和单个查询中获得逗号分隔的结果:

select FirstName + ' ' LastName from table_of_Names where NameType='game show host'

Bob Barker, Willie Aammes, Steve Allen, Clive Anderson

谢谢。

【问题讨论】:

标签: sql-server tsql


【解决方案1】:

带参数(性能更好):

DECLARE @list VARCHAR(max)

SELECT @list = COALESCE(@list + ', ' , '') + FirstName + ' ' + LastName 
FROM table_of_Names where NameType='game show host'

SELECT @list

不带参数(性能不佳):

select stuff((select ','+ FirstName + ' ' + LastName
              FROM table_of_Names where NameType='game show host'
              for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') as NameList

【讨论】:

  • 谢谢,看起来不错,但我真的想在没有声明变量或参数的单个查询中做到这一点。
  • @RetroCoder:在这种情况下,请查看重复项。这是一个很常见的问题...除非您希望我们为您编写代码...
  • 大声笑,只是为你写的......根据你的评论 RetroCoder 修改了我的答案。
  • 当你这样做时,看看实际的执行计划。带参数的第一个选项比我包含的 STUFF 示例快得多。
【解决方案2】:

我知道的最简单的方法是编写一个存储过程,它遍历结果集并为除最后一行之外的所有行附加逗号和空格。

【讨论】:

  • 你为什么要这样做?简单的研究向您展示了更好的方法,并且每天都会被问好几次
  • 有很多不同的方法可以做到这一点,而循环在 SQL 中并不是一个好主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多