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

Comment conserver une esperluette (&) lors de l'utilisation de FOR XML PATH sur SQL 2005

Il y a des situations où une personne peut ne pas vouloir du XML bien formé - celle que j'ai rencontrée (et peut-être l'affiche originale) utilisait la technique For XML Path pour renvoyer une liste de champs unique d'éléments 'enfants' via une requête récursive. Plus d'informations sur cette technique sont ici (spécifiquement dans la section 'Les méthodes XML de la boîte noire'):Concaténation des valeurs de ligne dans Transact-SQL

Pour ma situation, voir 'H&E' (une tache de pathologie) transformé en 'XML bien formé' a été une vraie déception. Heureusement, j'ai trouvé une solution... la page suivante m'a aidé à résoudre ce problème relativement facilement et sans avoir à ré-architecturer ma requête récursive ou à ajouter une analyse supplémentaire au niveau de la présentation (pour cela ainsi que pour d'autres/futures situations où mon enfant -les champs de données des lignes contiennent des caractères XML réservés) :Gestion des caractères spéciaux avec FOR XML PATH

EDIT :code ci-dessous à partir de l'article de blog référencé.

select
  stuff(
     (select ', <' + name + '>'
     from sys.databases
     where database_id > 4
     order by name
     for xml path(''), root('MyString'), type
     ).value('/MyString[1]','varchar(max)')
   , 1, 2, '') as namelist;