Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2025 (17.x)
Azure SQL-Datenbank
AzureSQL Managed Instance
SQL SQL-Datenbank in Microsoft Fabric
Die JSON_OBJECTAGG Syntax erstellt ein JSON-Objekt aus einer Aggregation von SQL-Daten oder -Spalten.
JSON_OBJECTAGG kann auch in einer SELECT Anweisung mit GROUP BY GROUPING SETS Klausel verwendet werden.
Die Schlüssel-Wert-Paare können als Eingabewerte, Spalten- und Variablenverweise angegeben werden.
Note
Verwenden Sie JSON_ARRAYAGG, um stattdessen ein JSON-Array aus einem Aggregat zu erstellen.
Beide json-AggregatfunktionenJSON_OBJECTAGG und JSON_ARRAYAGG sind:
allgemein verfügbar für Azure SQL-Datenbank, Azure SQL Managed Instance (mit sql Server 2025 oder Always-up-to-dateupdate policy**), SQL-Datenbank in Microsoft Fabric und Fabric Data Warehouse.
in der Vorschau für SQL Server 2025 (17.x).
Transact-SQL-Syntaxkonventionen
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
Das Schlüssel-Wert-Paar des JSON-Objekts.
json_null_clause
Optional. Lässt die gesamte Eigenschaft eines Objekts aus, wenn der Wert NULL lautet, oder verwenden Sie JSON-Null als Eigenschaftswert. Wenn nicht angegeben, ist NULL ON NULL der Standardwert.
Rückgabewert
Gibt eine gültige JSON-Objektzeichenfolge vom Typ nvarchar(max) zurück. Wenn die RETURNING json Option enthalten ist, wird das JSON-Objekt als JSON-Typ zurückgegeben.
Examples
A. Zurückgeben eines JSON-Objekts mit einem Schlüssel
Im folgenden Beispiel wird ein JSON-Objekt mit einem Schlüssel und einem Null-Wert zurückgegeben.
SELECT JSON_OBJECTAGG('key':NULL);
Hier ist das Ergebnis.
{"key":null}
B. Erstellen eines JSON-Objekts aus dem Resultset
Im folgenden Beispiel wird ein JSON-Objekt mit drei Eigenschaften aus einem Resultset erstellt.
SELECT JSON_OBJECTAGG(c1:c2)
FROM (
VALUES('key1', 'c'), ('key2', 'b'), ('key3', 'a')
) AS t(c1, c2);
Hier ist das Ergebnis.
{"key1":"c","key2":"b","key3":"a"}
C. Ergebnis mit zwei Spalten zurückgeben
Im folgenden Beispiel wird ein Ergebnis mit zwei Spalten zurückgegeben. Die erste Spalte enthält den Wert object_id. Die zweite Spalte enthält ein JSON-Objekt, bei dem der Schlüssel der Spaltenname und der Wert column_id ist.
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. Zurückgeben eines JSON-Objekts als JSON-Typ
Im folgenden Beispiel wird ein JSON-Objekt als JSON-Typ zurückgegeben.
SELECT JSON_OBJECTAGG('a':1 RETURNING JSON);
Ergebnis
{"a":1}
Hier ist das Ergebnis.
| 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. Aggregiertes Ergebnis mit vier Spalten zurückgeben
Das folgende Beispiel liefert ein Ergebnis mit vier Spalten aus einer SELECT Anweisung, die enthält SUM und JSON_OBJECTAGG mit GROUP BY GROUPING SETSaggregiert. Die ersten beiden Spalten geben den Wert und id den type Spaltenwert zurück. Die dritte Spalte total_amount gibt den Wert des Aggregats SUM in der amount Spalte zurück. Die vierte Spalte json_total_name_amount gibt den Wert des Aggregats JSON_OBJECTAGG für die Spalten und name die amount Spalten zurück.
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), ());
Hier ist das Ergebnis.
| 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} |