Partager via


JSON_OBJECTAGG (Transact-SQL)

S’applique à : Base de données SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL dans Microsoft Fabric

La JSON_OBJECTAGG syntaxe construit un objet JSON à partir d’une agrégation de données ou de colonnes SQL. JSON_OBJECTAGG peut également être utilisé dans une SELECT instruction avec GROUP BY GROUPING SETS une clause.

Les paires clé/valeur peuvent être spécifiées en tant que valeurs d’entrée, colonne, références de variables.

Note

Pour créer un tableau JSON à partir d’un agrégat, utilisez JSON_ARRAYAGG.

Les deux fonctions d’agrégation JSON_OBJECTAGG et JSON_ARRAYAGG sont les suivantes :

  • généralement disponible pour Azure SQL Database, Azure SQL Managed Instance (avec SQL Server 2025 ou Always-up-to-datede mise à jour policy**), base de données SQL dans Microsoft Fabric et Fabric Data Warehouse.

  • en aperçu pour SQL Server 2025 (17.x).

Conventions de la syntaxe Transact-SQL

Syntax

JSON_OBJECTAGG ( json_key_value [ json_null_clause ] [ RETURNING json ] )

json_key_value ::= <json_name> : <value_expression>

json_null_clause ::= NULL ON NULL | ABSENT ON NULL

Arguments

json_key_value

La paire clé/valeur de l'objet JSON.

json_null_clause

Optional. Omettez la propriété entière d’un objet si la valeur est NULL ou utilisez JSON null comme valeur de propriété. En cas d’omission, NULL ON NULL est la valeur par défaut.

Valeur retournée

Retourne une chaîne d’objet JSON valide de type nvarchar(max). Si l’option RETURNING json est incluse, l’objet JSON est retourné en tant que type json .

Examples

A. Retourner un objet JSON avec une clé

L’exemple suivant renvoie un objet JSON avec une clé et une valeur nulle.

SELECT JSON_OBJECTAGG('key':NULL);

Voici l'ensemble des résultats.

{"key":null}

B. Construire un objet JSON à partir du jeu de résultats

L’exemple suivant construit un objet JSON avec trois propriétés à partir d’un jeu de résultats.

SELECT JSON_OBJECTAGG(c1:c2)
FROM (
    VALUES('key1', 'c'), ('key2', 'b'), ('key3', 'a')
) AS t(c1, c2);

Voici l'ensemble des résultats.

{"key1":"c","key2":"b","key3":"a"}

C. Retourner le résultat avec deux colonnes

L'exemple suivant renvoie un résultat avec deux colonnes. La première colonne contient la valeur object_id. La deuxième colonne contient un objet JSON où la clé est le nom de la colonne, et column_id la valeur.

SELECT TOP (5) c.object_id,
               JSON_OBJECTAGG(c.name:c.column_id) AS columns
FROM sys.columns AS c
GROUP BY c.object_id;

D. Retourner un objet JSON en tant que type JSON

L’exemple suivant retourne un objet JSON en tant que type JSON .

SELECT JSON_OBJECTAGG('a':1 RETURNING JSON);

Résultat

{"a":1}

Voici l'ensemble des résultats.

object_id column_list
3 {"bitpos":12,"cid":6,"colguid":13,"hbcolid":3,"maxinrowlen":8,"nullbit":11,"offset":10,"ordkey":7,"ordlock":14,"rcmodified":4,"rscolid":2,"rsid":1,"status":9,"ti":5}
5 {"cmprlevel":9,"fgidfs":7,"fillfact":10,"idmajor":3,"idminor":4,"lockres":17,"maxint":13,"maxleaf":12,"maxnullbit":11,"minint":15,"minleaf":14,"numpart":5,"ownertype":2,"rcrows":8,"rowsetid":1,"rsguid":16,"scope_id":18,"status":6}
6 {"cloneid":6,"dbfragid":8,"id":1,"partid":3,"rowsetid":7,"segid":5,"status":9,"subid":2,"version":4}
7 {"auid":1,"fgid":5,"ownerid":3,"pcdata":10,"pcreserved":11,"pcused":9,"pgfirst":6,"pgfirstiam":8,"pgroot":7,"status":4,"type":2}
8 {"fileid":2,"filename":4,"name":3,"status":1}

E. Retourner le résultat agrégé avec quatre colonnes

L’exemple suivant retourne un résultat avec quatre colonnes d’une SELECT instruction contenant SUM et JSON_OBJECTAGG des agrégats avec GROUP BY GROUPING SETS. Les deux premières colonnes retournent la valeur et id la type valeur de colonne. La troisième colonne total_amount retourne la valeur d’agrégation SUM sur la amount colonne. La quatrième colonne json_total_name_amount retourne la valeur d’agrégation JSON_OBJECTAGG sur les colonnes et name les amount colonnes.

WITH T
AS (SELECT *
    FROM (
        VALUES (1, 'k1', 'a', 2), (1, 'k2', 'b', 3), (1, 'k3', 'b', 4), (2, 'j1', 'd', 7), (2, 'j2', 'd', 9)
    ) AS b(id, name, type, amount))
SELECT id,
       type,
       SUM(amount) AS total_amount,
       JSON_OBJECTAGG(name:amount) AS json_total_name_amount
FROM T
GROUP BY GROUPING SETS((id), (type), (id, type), ());

Voici l'ensemble des résultats.

id type total_amount json_total_name_amount
1 a 2 {"k1":2}
NULL a 2 {"k1":2}
1 b 7 {"k3":4,"k2":3}
NULL b 7 {"k3":4,"k2":3}
2 d 16 {"j2":9,"j1":7}
NULL d 16 {"j2":9,"j1":7}
NULL NULL 25 {"k1":2,"k3":4,"k2":3,"j2":9,"j1":7}
1 NULL 9 {"k2":3,"k3":4,"k1":2}
2 NULL 16 {"j2":9,"j1":7}