Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à : Base de données SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL 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} |