Compartir a través de


JSON_OBJECTAGG (Transact-SQL)

Se aplica a: SQL Server 2025 (17.x) Base de datos SQL de Azure SQL Database deAzure SQL Managed Instanceen 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}