Concaténation de chaînes hautes performances dans SQL Server : contourner les limitations du CLR
L'agrégation de chaînes de plusieurs lignes en une seule chaîne est une tâche fréquente de SQL Server. Bien que des méthodes comme COALESCE
et FOR XML PATH
existent, elles ne sont souvent pas efficaces en termes d'efficacité. Cela est particulièrement vrai dans SQL Azure, qui ne prend pas en charge les fonctions CLR, éliminant ainsi une solution commune hautes performances.
Alternatives efficaces : approche CTE récursive
Une alternative robuste et efficace exploite une expression de table commune (CTE) récursive. Cette technique implique ces étapes clés :
Cette méthode garantit des résultats cohérents grâce à un regroupement et un tri explicites.
Mise en œuvre pratique :
Voici un exemple d'implémentation utilisant un CTE récursif :
WITH Partitioned AS ( SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS NameNumber, COUNT(*) OVER (PARTITION BY ID) AS NameCount FROM dbo.SourceTable ), Concatenated AS ( SELECT ID, CAST(Name AS nvarchar(max)) AS FullName, Name, NameNumber, NameCount FROM Partitioned WHERE NameNumber = 1 UNION ALL SELECT P.ID, CAST(C.FullName + ', ' + P.Name AS nvarchar(max)), P.Name, P.NameNumber, P.NameCount FROM Partitioned AS P INNER JOIN Concatenated AS C ON P.ID = C.ID AND P.NameNumber = C.NameNumber + 1 ) SELECT ID, FullName FROM Concatenated WHERE NameNumber = NameCount;
Ce CTE récursif fournit une solution évolutive et efficace pour la concaténation de chaînes dans SQL Server, en particulier dans les environnements où les fonctions CLR ne sont pas disponibles. Notez l'utilisation de nvarchar(max)
pour gérer des chaînes concaténées potentiellement volumineuses.
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!