Agrégation JSON et chaîne de caractères

Effectué

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.