Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verkettung von Zeichenfolgen durch for xml path

Ihre Unterabfrage kann nicht zwei Werte zurückgeben. Wenn Sie nur Zeichenfolgen verketten möchten, benötigen Sie das xml nicht Datentyp überhaupt. Sie können das stuff() tun und Unterabfrage in einer einzigen Anweisung:

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, '');