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

Pra*_*tik 0 sql t-sql sql-server csv performance

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

select [name] from sys.objects where type='u'
Run Code Online (Sandbox Code Playgroud)

我明白了:

DropDownList
SubActivityDetails
Report
Employees
UserMaster
ProjectMaster
Run Code Online (Sandbox Code Playgroud)

我要这个 :

DropDownList,SubActivityDetails,Report,Employees,UserMaster,ProjectMaster
Run Code Online (Sandbox Code Playgroud)

仅在一个查询中

而且在这种情况下

select [name],[object_id] from sys.objects where type='u'
Run Code Online (Sandbox Code Playgroud)

我明白了:

DropDownList    66099276
SubActivityDetails  197575742
Report  254623950
Employees   270624007
Run Code Online (Sandbox Code Playgroud)

但我想要这个:

  ["SubActivityDetails",197575742],
  ["Report",254623950],
  ["Employees",270624007]
Run Code Online (Sandbox Code Playgroud)

所以它类似于json.

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

哪个更好

情况1 :

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

案例2:

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

Adr*_*der 5

看看这样的事情

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

SELECT @Val
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)