在SQL Server中以逗号分隔,垂直于水平,值的行

时间:2010-11-25 07:22:40

标签: sql sql-server performance tsql csv

如何以逗号分隔值的形式获取行。

select [name] from sys.objects where type='u'

我明白了:

DropDownList
SubActivityDetails
Report
Employees
UserMaster
ProjectMaster

我想要这个:

DropDownList,SubActivityDetails,Report,Employees,UserMaster,ProjectMaster
仅在一个查询中

在这种情况下也是

select [name],[object_id] from sys.objects where type='u'

我明白了:

DropDownList    66099276
SubActivityDetails  197575742
Report  254623950
Employees   270624007

但我想要这个:

  ["SubActivityDetails",197575742],
  ["Report",254623950],
  ["Employees",270624007]

因此它与json类似。

并且会有很多数据,因此性能是一个主要问题!

哪个更好

案例1:

DECLARE @Val VARCHAR(MAX) 开始 选择@Val = isnull(@val +','+ [name],[name]) 来自sys.objects
其中type ='u' 选择@Val 端

案例2:

DECLARE @Val VARCHAR(MAX) 开始 选择@Val = COALESCE(@val +','+ [name],[name]) 来自sys.objects
其中type ='u' 选择@Val 端

1 个答案:

答案 0 :(得分:5)

看看这样的事情

DECLARE @Val VARCHAR(MAX)
select  @Val = COALESCE(@val + ',' + [name], [name])
from    sys.objects 
where   type='u' 

SELECT @Val

好的,对于第二个查询,我们可以尝试

DECLARE @Val VARCHAR(MAX)

select  @Val = COALESCE(@val + ',' + '["' + [name] + '",' + CAST([object_id] AS VARCHAR(50)) + ']', '["' + [name] + '",' + CAST([object_id] AS VARCHAR(50)) + ']') 
from    sys.objects 
where   type='u' 

SELECT @Val