Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: SQL Server 2025 (17.x)
Base de datos SQL de Azure SQL Database
deAzure SQL Managed Instance
en Microsoft Fabric
La JSON_OBJECTAGG sintaxis construye un objeto JSON a partir de una agregación de datos o columnas SQL.
JSON_OBJECTAGGtambién se puede usar en una instrucción con SELECT cláusula GROUP BY GROUPING SETS .
Los pares clave-valor se pueden especificar como valores de entrada, columna, referencias de variables.
Note
Para crear una matriz JSON a partir de un agregado, use JSON_ARRAYAGG.
Tanto las funciones JSON_OBJECTAGG de agregado JSON_ARRAYAGG como las siguientes:
disponible con carácter general para Azure SQL Database, Azure SQL Managed Instance (con SQL Server 2025 o Always-up-to-dateupdate policy**), SQL Database en Microsoft Fabric y Fabric Data Warehouse.
en vista previa para SQL Server 2025 (17.x).
Convenciones de sintaxis de 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
El par clave-valor del objeto JSON.
json_null_clause
Optional. Omite toda la propiedad de un objeto si el valor es NULL o usa JSON NULL como valor de propiedad. Si se omite, NULL ON NULL es el valor predeterminado.
Valor devuelto
Devuelve una cadena de objeto JSON válida de tipo nvarchar(max). Si se incluye la RETURNING json opción, el objeto JSON se devuelve como tipo json .
Examples
A. Devolver un objeto JSON con una clave
En el ejemplo siguiente ejemplo se devuelve un objeto JSON con una clave y un valor nulo.
SELECT JSON_OBJECTAGG('key':NULL);
Este es el conjunto de resultados.
{"key":null}
B. Construir un objeto JSON a partir del conjunto de resultados
En el ejemplo siguiente se construye un objeto JSON con tres propiedades de un conjunto de resultados.
SELECT JSON_OBJECTAGG(c1:c2)
FROM (
VALUES('key1', 'c'), ('key2', 'b'), ('key3', 'a')
) AS t(c1, c2);
Este es el conjunto de resultados.
{"key1":"c","key2":"b","key3":"a"}
C. Resultado devuelto con dos columnas
En el ejemplo siguiente se devuelve un conjunto de resultados con dos columnas. La primera columna contiene el valor object_id. La segunda columna contiene un objeto JSON donde la clave es el nombre de columna y el valor es column_id.
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. Devolver un objeto JSON como tipo JSON
En el ejemplo siguiente se devuelve un objeto JSON como tipo json .
SELECT JSON_OBJECTAGG('a':1 RETURNING JSON);
Resultado
{"a":1}
Este es el conjunto de resultados.
| 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. Devolver el resultado agregado con cuatro columnas
En el ejemplo siguiente se devuelve un resultado con cuatro columnas de una SELECT instrucción que contiene SUM y JSON_OBJECTAGG agrega con GROUP BY GROUPING SETS. Las dos primeras columnas devuelven el valor de id columna y type . La tercera columna total_amount devuelve el valor de SUM agregado en la amount columna. La cuarta columna json_total_name_amount devuelve el valor de JSON_OBJECTAGG agregado en las name columnas y amount .
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), ());
Este es el conjunto de resultados.
| 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} |