SQL Server sélectionne les valeurs du jeu de résultats en tant que string séparée par des virgules

J'ai la requête suivante dans une procédure stockée.

set @result1='EmpId,EmpName,Phone,City' set @result2='select '+ @result1+ ' from [emptable]'+' where EmpId=1 and EmpjoinDate= ''May-2014''' exec(@result2) 

La requête renvoie

 EmpId | EmpName | Phone | City ---------------------------------- 1 | John | 832942 | NewYork 

Maintenant, comment append une requête pour que la procédure stockée renvoie le résultat d'une seule colonne

 | EmpInfo .........................| ------------------------------------ 1,John,832942,NewYork 

Répondez, s'il vous plaît. Merci.

 set @result1='CONCAT(EmpId,',',EmpName,',',Phone,',',City)' set @result2='select '+ @result1+ ' as EmpInfo from [emptable]'+' where EmpId=1 and EmpjoinDate= ''May-2014''' exec(@result2) 

Vous devez générer la string dans la variable @ result1:

 set @result1='EmpId+'',''+EmpName+'',''+Phone+'',''+City' 

Dans Management Studio, vous pouvez également accéder au menu Requête et sélectionner "Results To" -> "Results to Text" si cela vous suffit.

Si je vous comprends clairement, c'est ce que vous voulez. Vous devez concaténer les champs avec les virgules

 set @result1='EmpId+'',''+EmpName''+'',''+''Phone''+'',''+''City' set @result2='select '+@result1+' as EmpInfo from [emptable]'+' where EmpId=1 and EmpjoinDate= ''May-2014''' exec(@result2) 

L'utilisation de For XML et STUFF réécrit la requête comme suit:

 declare @result1 varchar(max), @result2 varchar(max) --Modify all input columns using Cast function to cast int datatype columns --to varchar .Also this way you can add as many columns from table 'emptable' --as you want set @result1=''','' + cast(EmpId as varchar(20)) + '','' + EmpName + '','' + cast(Phone as varchar(20)) + '','' + City' set @result2='select STUFF((SELECT '+ @result1+ ' from [emptable] '+' where EmpId=1 FOR XML PATH('''')), 1, 1, '''') as EmpInfo' exec(@result2) 

Vérifiez la démo ici

Ce que vous pouvez faire, c'est après avoir reçu @result1 vous remplacez datatables que vous souhaitez:

 set @result1='EmpId,EmpName,Phone,City' SET @result1 = REPLACE (@result1, ',', ' + '','' + ') --SET @result1 = 'CONCAT ( ' + REPLACE (@result1, ',', ' , '','' , ') + ')' -- OR THIS IF you have INT inside this columns set @result2='select '+ @result1+ ' from [emptable]'+' where EmpId=1 and EmpjoinDate= ''May-2014''' exec(@result2) 

Avec la fonction CONCAT semble mieux, si vous avez Server 2012. Sinon, vous aurez besoin de valeurs CAST INT dans la string