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

Requête SQL - Concaténation des résultats en une seule chaîne

Si vous êtes sur SQL Server 2005 ou supérieur, vous pouvez utiliser ce FOR XML PATH & STUFF astuce :

DECLARE @CodeNameString varchar(100)

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

Le FOR XML PATH('') concatène essentiellement vos chaînes en un seul long résultat XML (quelque chose comme ,code1,code2,code3 etc.) et le STUFF place un caractère "rien" au premier caractère, par ex. efface la première virgule "superflue", pour vous donner le résultat que vous recherchez probablement.

MISE À JOUR : OK - je comprends les commentaires - si votre texte dans la table de la base de données contient déjà des caractères comme < , > ou & , puis ma solution actuelle les encodera en fait en < , > , et & .

Si vous rencontrez un problème avec cet encodage XML - alors oui, vous devez consulter la solution proposée par @KM qui fonctionne également pour ces caractères. Un mot d'avertissement de moi :cette approche est beaucoup plus ressources et traitement intensifs - juste pour que vous le sachiez.