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