Maison >base de données >tutoriel mysql >Comment créer efficacement des listes délimitées par des virgules dans SQL Server ?

Comment créer efficacement des listes délimitées par des virgules dans SQL Server ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-18 10:22:07654parcourir

How to Efficiently Create Comma-Delimited Lists in SQL Server?

Génération de listes séparées par des virgules dans SQL Server

Ce guide explique comment créer des listes délimitées par des virgules à partir de tables SQL Server. Les méthodes exploitent FOR XML PATH et STUFF pour une génération de liste efficace.

Comprendre l'approche

La technique de base combine FOR XML PATH('') pour extraire les données sous forme de chaîne (sans balises XML) et STUFF pour remplacer les espaces par des virgules. Cependant, cette approche a des limites.

Répartition originale des requêtes :

La méthode originale utilise FOR XML PATH('') pour obtenir des données sous forme de chaîne. L'alias data(), bien qu'apparemment un élément XML, est une solution de contournement qui produit une erreur lors de la génération XML, gérée ensuite par la requête externe. Cette gestion des erreurs est loin d’être idéale.

Requête améliorée :

Une solution plus robuste est présentée ci-dessous :

<code class="language-sql">SELECT E1.deptno,
       STUFF((SELECT ', ' + E2.ename
               FROM emp AS E2
               WHERE E1.deptno = E2.DEPTNO
               FOR XML PATH('')), 1, 2, '')
FROM EMP AS E1
GROUP BY DEPTNO;</code>

Cette requête améliorée concatène directement les valeurs avec des virgules, éliminant ainsi la solution de contournement XML sujette aux erreurs.

Gestion XML avancée :

Pour éviter des problèmes potentiels avec les caractères XML spéciaux, utilisez .value pour une gestion XML plus sûre :

<code class="language-sql">SELECT E1.deptno,
       STUFF((SELECT ', ' + E2.ename
               FROM emp AS E2
               WHERE E1.deptno = E2.DEPTNO
               FOR XML PATH(''), TYPE)
               .value('.', 'NVARCHAR(MAX)'), 1, 2, '')
FROM EMP AS E1
GROUP BY DEPTNO;</code>

Cette dernière requête offre la méthode la plus fiable pour générer des listes séparées par des virgules dans SQL Server, atténuant ainsi les erreurs potentielles liées au XML. Le .value('.', 'NVARCHAR(MAX)') convertit explicitement la sortie XML en chaîne, garantissant la compatibilité et empêchant tout comportement inattendu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn