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

SQL-Abfrage - Verketten von Ergebnissen zu einer Zeichenfolge

Wenn Sie SQL Server 2005 oder höher verwenden, können Sie diesen FOR XML PATH & STUFF verwenden Trick:

DECLARE @CodeNameString varchar(100)

SELECT 
   @CodeNameString = STUFF( (SELECT ',' + CodeName 
                             FROM dbo.AccountCodes 
                             ORDER BY Sort
                             FOR XML PATH('')), 
                            1, 1, '')

Der FOR XML PATH('') verkettet Ihre Strings im Grunde zu einem langen XML-Ergebnis (etwas wie ,code1,code2,code3 etc.) und STUFF setzt ein "Nichts"-Zeichen an das erste Zeichen, z.B. löscht das "überflüssige" erste Komma, um Ihnen das Ergebnis zu liefern, nach dem Sie wahrscheinlich suchen.

AKTUALISIERUNG: OK - ich verstehe die Kommentare - wenn Ihr Text in der Datenbanktabelle bereits Zeichen wie < enthält , > oder & , dann meine aktuelle Lösung wird diese tatsächlich in < kodieren , > , und & .

Wenn Sie ein Problem mit dieser XML-Codierung haben, müssen Sie sich die von @KM vorgeschlagene Lösung ansehen, die auch für diese Zeichen funktioniert. Ein Wort der Warnung von mir:dieser Ansatz ist viel mehr ressourcen- und verarbeitungsintensiv - nur damit Sie es wissen.