Compartilhar via


JSON_OBJECTAGG (Transact-SQL)

Aplica-se a: SQL Server 2025 (17.x) Banco de Dados SQL do AzureBanco de DadosSQL do Azure Banco de Dados SQL banco de dados SQL do Banco de Dados SQL do Azurebanco de dados SQL no Microsoft Fabric

A JSON_OBJECTAGG sintaxe constrói um objeto JSON a partir de uma agregação de dados ou colunas SQL. JSON_OBJECTAGG também pode ser usado em uma SELECT instrução com GROUP BY GROUPING SETS cláusula.

Os pares chave/valor podem ser especificados como valores de entrada, coluna, referências de variáveis.

Note

Para criar uma matriz JSON de uma agregação, use JSON_ARRAYAGG.

Ambas as funções de agregação JSON_OBJECTAGG e JSON_ARRAYAGG são:

  • geralmente disponível para o Banco de Dados SQL do Azure, a Instância Gerenciada de SQL do Azure (com a política de atualização always-up-to-date do SQL 2025 ou do SQL Server**), o banco de dados SQL no Microsoft Fabric e o Fabric Data Warehouse.

  • em prévia para SQL Server 2025 (17.x).

Convenções de sintaxe 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

O par chave-valor do objeto JSON.

json_null_clause

Optional. Omite a propriedade inteira de um objeto se o valor é NULL, ou use JSON null como valor da propriedade. Se omitido, NULL ON NULL é o padrão.

Valor de retorno

Retorna uma cadeia de caracteres de objeto JSON válida do tipo nvarchar(max ). Se a opção RETURNING json estiver incluída, o objeto JSON será retornado como tipo json .

Examples

A. Retornar objeto JSON com uma chave

O exemplo a seguir retorna um objeto JSON com uma chave e um valor nulo.

SELECT JSON_OBJECTAGG('key':NULL);

Veja aqui o conjunto de resultados.

{"key":null}

B. Construir objeto JSON do conjunto de resultados

O exemplo a seguir constrói um objeto JSON com três propriedades de um conjunto de resultados.

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

Veja aqui o conjunto de resultados.

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

C. Retornar resultado com duas colunas

O exemplo a seguir retorna um resultado com duas colunas. A primeira coluna contém o valor object_id. A segunda coluna contém um objeto JSON em que a chave é o nome da coluna e o valor é o 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. Retornar um objeto JSON como tipo JSON

O exemplo a seguir retorna um objeto JSON como tipo json .

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

Resultado

{"a":1}

Veja aqui o 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. Retornar resultado agregado com quatro colunas

O exemplo a seguir retorna um resultado com quatro colunas de uma SELECT instrução contendo SUM e JSON_OBJECTAGG agrega com GROUP BY GROUPING SETS. As duas primeiras colunas retornam o valor e id a type coluna. A terceira coluna total_amount retorna o valor da SUM agregação na amount coluna. A quarta coluna json_total_name_amount retorna o valor da JSON_OBJECTAGG agregação nas colunas e name nas amount colunas.

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), ());

Veja aqui o conjunto de resultados.

id tipo 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}