Maison >base de données >tutoriel mysql >Comment concaténer efficacement les résultats d'une requête SQL en une seule chaîne ?

Comment concaténer efficacement les résultats d'une requête SQL en une seule chaîne ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-03 09:42:43210parcourir

How to Efficiently Concatenate SQL Query Results into a Single String?

Accumuler les résultats d'une requête SQL dans une seule chaîne

Concaténer les résultats d'une requête dans une seule chaîne est une tâche courante dans la programmation de bases de données. Dans SQL Server, il existe deux approches pour y parvenir : utiliser la technique FOR XML PATH & STUFF ou exploiter la fonction STRING_AGG.

FOR XML PATH & STUFF

Pour SQL Server versions 2005 et supérieures, la combinaison FOR XML PATH & STUFF est une approche efficace :

DECLARE @CodeNameString varchar(100)

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

Cette solution concatène les résultats en utilisant FOR XML PATH('') dans une chaîne XML, puis utilise STUFF pour supprimer la virgule initiale héritée de la concaténation XML.

Fonction STRING_AGG

Dans SQL Server 2017 et versions ultérieures, la fonction STRING_AGG fournit une solution dédiée à cela tâche :

DECLARE @CodeNameString varchar(100)

SELECT 
   @CodeNameString = STRING_AGG(CodeName, ',')
FROM 
   dbo.AccountCodes
ORDER BY 
   Sort

La fonction STRING_AGG concatène les résultats directement en une seule chaîne, séparés par le délimiteur spécifié (dans ce cas, ',').

Gestion des caractères spéciaux

Il est important de noter que l'approche FOR XML PATH & STUFF peut encoder certains caractères spéciaux, tels que '<', '>' et '&', en entités XML (<, > et &). Pour les situations où ces caractères posent problème, la fonction STRING_AGG avec la clause USING XMLTYPE peut être utilisée :

DECLARE @CodeNameString varchar(100)

SELECT 
   @CodeNameString = STRING_AGG(CodeName, ',') USING XMLTYPE
FROM 
   dbo.AccountCodes
ORDER BY 
   Sort

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