2010-11-25 21 views
0

Comment obtenir des lignes en tant que valeurs séparées par des virgules.Lignes à des valeurs séparées par des virgules, verticales à horizontales, dans SQL Server

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

je reçois ceci:

DropDownList 
SubActivityDetails 
Report 
Employees 
UserMaster 
ProjectMaster 

je veux ceci:

DropDownList,SubActivityDetails,Report,Employees,UserMaster,ProjectMaster 

dans une requête unique que

Et dans ce cas

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

Je reçois ceci:

DropDownList 66099276 
SubActivityDetails 197575742 
Report 254623950 
Employees 270624007 

Mais je veux ceci:

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

de sorte que son semblable à JSON.

Et il y aurait beaucoup de données, donc la performance est une préoccupation majeure!

qui est mieux

Cas 1:

DECLARE @val VARCHAR (MAX) commencer sélectionnez @val = isnull (@val + '' + [nom], [nom]) de sys.objects
où type = 'u' SELECT @val fin

cas 2:

DECLAR E @val VARCHAR (MAX) commencent sélectionner @val = COALESCE (@val + '' + [nom], [nom]) de sys.objects
où type = 'u' SELECT @val extrémité

Répondre

5

Jetez un oeil à quelque chose comme ça

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

SELECT @Val 

Ok, donc pour la seconde requête, nous pouvons essayer

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 
+0

Ohh wow! Cela fonctionne très bien, mais que pouvez-vous me recommander pour le cas 2 – Pratik

+0

Désolé de vous déranger à nouveau, mais qui, une fois mieux cas 1: DECLARE @val VARCHAR (MAX) commencer sélectionnez @val = isnull (@val + '' + [nom], [nom]) de sys.objects où type = 'u' SELECT @val extrémité cas 2: DECLARE @val VARCHAR (MAX) commencent sélectionner @val = COALESCE (@val + '' + [nom], [nom]) de sys.objects où type = 'u' SELECT @val extrémité – Pratik

+0

Dans thi s cas, ils sont tous deux les mêmes. COALESCE diffère de ISNULL que vous pouvez spécifier plus de 2 valeurs à regarder.Jetez un oeil à la documentation. –