Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Concaténation de chaînes par pour le chemin xml

Votre sous-requête ne peut pas renvoyer deux valeurs. Si vous voulez simplement concaténer des chaînes, vous n'avez pas besoin du xml type de données du tout. Vous pouvez faire le stuff() et sous-requête dans une seule instruction :

declare @Rep1Names nvarchar(max) = (
    stuff((select ', [' + report_name + ']' as name
           from (select distinct report_order, report_name
                 from #report
                ) x
           order by report_order
           for xml path('')
          )
         ), 1, 1, '');

declare @Rep2Names nvarchar(max) = (
    stuff(select ', isnull([' + report_name + '], 0) as [' + report_name + ']' as res
           from (select distinct report_order, report_name
                 from #report
                ) x
           order by report_order
           for xml path('')
          )
   ), 1, 1, '');