Agrégation JSON et chaîne de caractères
SQL Server 2025 introduit de nouvelles fonctions d’agrégation pour la création de tableaux JSON, d’objets JSON et de chaînes délimitées. Ces ajouts facilitent la génération de sortie structurées, telles que les réponses d’API, les rapports ou les exportations de journaux directement à partir de requêtes T-SQL. Les nouvelles fonctions vous permettent de déplacer la mise en forme des données dans la couche de base de données, ce qui réduit la nécessité d’une transformation côté client complexe.
Vue d’ensemble des fonctions d’agrégation de chaînes et JSON
Examinons les trois nouvelles fonctions d’agrégation :
JSON_ARRAYAGG
Crée un tableau JSON à partir des valeurs d’une expression. La valeur de chaque ligne devient un élément dans le tableau JSON résultant. Il simplifie la génération de tableaux de valeurs, tels que des listes d’ID ou de noms.
JSON_OBJECTAGG
Crée un objet JSON à partir de paires clé-valeur. Le premier argument définit la clé et le second définit la valeur. Ce jumelage de valeurs facilite la génération de documents JSON directement à partir des résultats de la requête.
STRING_CONCAT_WS
Concatène les chaînes avec un séparateur spécifié tout en ignorant les valeurs NULL. Le nom de la fonction correspond à String CONCAT With Separator. Il offre un moyen efficace de joindre des valeurs telles que des noms, des balises ou des listes délimitées par des virgules.
Opérateur de concaténation de chaîne ||
SQL Server 2025 introduit l’opérateur ANSI-standard || comme alternative à la + concaténation de chaînes. Il fournit une syntaxe plus portable et est souvent préféré lors de la combinaison de plusieurs colonnes en une seule sortie de texte.
FONCTION UNISTR
UNISTR() retourne une chaîne Unicode basée sur des séquences d’échappement, ce qui vous permet d’insérer des caractères par élément de code ou par notation d’échappement. Il est utile lors de la création de scripts qui incluent des caractères non imprimables ou multilingues.
Exemple 1 : Générer des tableaux et des objets JSON à partir des résultats de la requête
Imaginez que votre base de données stocke les données de commande des clients dans deux tables : Sales.Customer et Sales.SalesOrderHeader. L’équipe d’analyse a besoin d’un rapport JSON récapitunant chaque client et leurs ID de commande pour l’intégration à un tableau de bord web.
Requête : Utiliser JSON_ARRAYAGG et JSON_OBJECTAGG
La requête suivante récupère chaque client ainsi qu’un tableau JSON de leurs ID de commande, encapsulés dans un objet JSON.
SELECT
C.CustomerID,
C.FirstName + ' ' + C.LastName AS CustomerName,
JSON_OBJECTAGG(
'Customer' : C.CustomerID,
'Orders' : JSON_ARRAYAGG(SOH.SalesOrderID)
) AS CustomerSummary
FROM Sales.Customer AS C
JOIN Sales.SalesOrderHeader AS SOH
ON C.CustomerID = SOH.CustomerID
GROUP BY C.CustomerID, C.FirstName, C.LastName;
Results
| CustomerID | Nom du client | Résumé du client |
|---|---|---|
| 11001 | Jordan Patterson | {"Customer » :11001,"Orders » :[43722,43723,43724]} |
| 11002 | Alicia Tran | {"Customer » :11002,"Orders » :[43725,43726]} |
| 11003 | Marco Diaz | {"Customer » :11003,"Orders » :[43727]} |
Dans cet exemple, JSON_ARRAYAGG collecte tous les ID de commande pour chaque client dans un tableau JSON et JSON_OBJECTAGG encapsule le résultat dans un objet JSON avec des paires clé-valeur claires. La structure entière est produite dans une requête T-SQL.
Exemple 2 : Mettre en forme la sortie du texte à l’aide de STRING_CONCAT_WS
L’équipe marketing a besoin d’une liste des noms de produits achetés par chaque client séparés par des virgules pour une campagne d’e-mail. La STRING_CONCAT_WS fonction peut générer ces résultats correctement, en omettant toutes les valeurs NULL.
Requête : concaténer des noms de produits avec un séparateur
La requête suivante récupère chaque client ainsi qu’une liste de produits séparés par des virgules qu’il a achetées.
SELECT
C.CustomerID,
C.FirstName + ' ' + C.LastName AS CustomerName,
STRING_CONCAT_WS(', ',
P.Name
) AS ProductsPurchased
FROM Sales.Customer AS C
JOIN Sales.SalesOrderHeader AS SOH
ON C.CustomerID = SOH.CustomerID
JOIN Sales.SalesOrderDetail AS SOD
ON SOH.SalesOrderID = SOD.SalesOrderID
JOIN Production.Product AS P
ON SOD.ProductID = P.ProductID
GROUP BY C.CustomerID, C.FirstName, C.LastName;
Results
| CustomerID | Nom du client | ProduitsAchetés |
|---|---|---|
| 11001 | Jordan Patterson | Touring-2000 Blue, 50, Mountain-100 Black, 44 |
| 11002 | Alicia Tran | Road-250 Jaune, 44, Mountain-200 Rouge, 48 |
| 11003 | Marco Diaz | Touring-3000 Blue, 62 |
Ici, STRING_CONCAT_WS joint les noms de produits avec des virgules et ignore automatiquement les entrées NULL, évitant ainsi la logique manuelle COALESCEou ISNULL logique.
Exemple 3 : Combiner du texte JSON et du texte délimité pour la sortie de l’API
Vous pouvez également utiliser ces fonctions ensemble pour préparer des données structurées pour une réponse d’API. La requête suivante crée un tableau JSON d’objets où chaque objet contient le nom et la liste de produits délimitées par des virgules d’un client.
SELECT
JSON_ARRAYAGG(
JSON_OBJECTAGG(
'Customer' : C.FirstName + ' ' + C.LastName,
'Products' : STRING_CONCAT_WS(', ', P.Name)
)
) AS ApiOutput
FROM Sales.Customer AS C
JOIN Sales.SalesOrderHeader AS SOH
ON C.CustomerID = SOH.CustomerID
JOIN Sales.SalesOrderDetail AS SOD
ON SOH.SalesOrderID = SOD.SalesOrderID
JOIN Production.Product AS P
ON SOD.ProductID = P.ProductID
GROUP BY C.CustomerID, C.FirstName, C.LastName;
Exemple de résultat
[
{"Customer":"Jordan Patterson","Products":"Touring-2000 Blue, 50, Mountain-100 Black, 44"},
{"Customer":"Alicia Tran","Products":"Road-250 Yellow, 44, Mountain-200 Red, 48"},
{"Customer":"Marco Diaz","Products":"Touring-3000 Blue, 62"}
]
Une application consomme directement cette structure ou l’exporte en tant que document JSON via des outils tels que SQL Server Management Studio (SSMS) ou Azure Data Studio.
Résumé
SQL Server 2025 ajoute JSON_ARRAYAGG, JSON_OBJECTAGGet STRING_CONCAT_WS simplifie la création de texte structuré et de sortie JSON dans T-SQL. Ces fonctions vous permettent de générer des données prêtes pour l’application à partir de requêtes sans code externe. Que vous prépariez des charges utiles JSON, construisiez des rapports ou mettez en forme des réponses d’API, ces fonctionnalités d’agrégation rendent SQL Server 2025 plus polyvalent pour les applications de données modernes.