Freigeben über


JSON-Datentyp

Gilt für: SQL Server 2025 (17.x) Azure SQL-Datenbank AzureSQL Managed InstanceSQL SQL-Datenbank in Microsoft Fabric

Der JSON-Datentyp speichert JSON-Dokumente in einem systemeigenen Binärformat.

Der JSON-Typ bietet einen qualitativ hochwertigen Speicher von JSON-Dokumenten, die für einfache Abfragen und Manipulationen optimiert sind, und bietet die folgenden Vorteile gegenüber dem Speichern von JSON-Daten als varchar oder nvarchar:

  • Effizientere Lesevorgänge, da das Dokument bereits analysiert wurde
  • Effizientere Schreibvorgänge, da die Abfrage einzelne Werte aktualisieren kann, ohne auf das gesamte Dokument zuzugreifen
  • Effizientere Speicherung, optimiert für die Komprimierung
  • Keine Änderung der Kompatibilität mit vorhandenem Code

Der JSON-Typ speichert Intern Daten mit UTF-8-Codierung, Latin1_General_100_BIN2_UTF8. Dieses Verhalten entspricht der JSON-Spezifikation.

Weitere Informationen zum Abfragen von JSON-Daten finden Sie unter JSON-Daten in SQL Server.

Beispielsyntax

Die Verwendungssyntax für den JSON-Typ ähnelt allen anderen SQL Server-Datentypen in einer Tabelle.

column_name JSON [ NOT NULL | NULL ] [CHECK ( constraint_expression ) ] [ DEFAULT ( default_expression ) ]

Der JSON-Datentyp kann in der Spaltendefinition verwendet werden, die in einer CREATE TABLE Anweisung enthalten ist. Beispiel:

CREATE TABLE Orders
(
    order_id INT,
    order_details JSON NOT NULL
);

Einschränkungen können als Teil der Spaltendefinition angegeben werden. Beispiel:

CREATE TABLE Orders
(
    order_id INT,
    order_details JSON NOT NULL
        CHECK (JSON_PATH_EXISTS(order_details, '$.basket') = 1)
);

Verfügbarkeit von Funktionen

Die JSON-Funktionsunterstützung wurde erstmals in SQL Server 2016 (13.x) eingeführt. Der native JSON-Typ wurde in Azure SQL Database und Azure SQL Managed Instance eingeführt und ist auch in SQL Server 2025 (17.x) verfügbar.

Der JSON-Datentyp ist unter allen Datenbankkompatibilitätsstufen verfügbar.

Note

Der JSON-Datentyp:

  • ist in der Regel für Azure SQL-Datenbank und azure SQL Managed Instance mit der SQL Server 2025- oder Always-up-to-Updaterichtlinie verfügbar.
  • befindet sich in der Vorschau für SQL Server 2025 (17.x) und SQL-Datenbank in Fabric.

Die Modify-Methode

Note

Die Methode modify befindet sich derzeit in der Vorschau und ist nur in SQL Server 2025 (17.x) verfügbar.

Der JSON-Datentyp unterstützt die modify Methode. Dient modify zum Ändern von JSON-Dokumenten, die in einer Spalte gespeichert sind. Die modify Methode verfügt über Optimierungen zum Ausführen von direkten Änderungen an den Daten, sofern möglich, und ist die bevorzugte Methode zum Ändern eines JSON-Dokuments in einer JSON-Spalte .

Bei JSON-Zeichenfolgen ist der neue Wert kleiner oder gleich dem vorhandenen Wert, ist eine direkte Änderung möglich.

Bei JSON-Zahlen ist der neue Wert vom gleichen Typ oder innerhalb des Bereichs des vorhandenen Werts möglich.

DROP TABLE IF EXISTS JsonTable;

CREATE TABLE JsonTable
(
    id INT PRIMARY KEY,
    d JSON
);

INSERT INTO JsonTable (id, d)
VALUES (1, '{"a":1, "b":"abc", "c":true}');

UPDATE JsonTable
SET d.modify('$.a', 14859)
WHERE id = 1;

UPDATE JsonTable
SET d.modify('$.b', 'def')
WHERE id = 1;

Funktionsunterstützung

Alle JSON-Funktionen unterstützen den JSON-Datentyp ohne Codeänderungen oder Verwendungsunterschiede.

  • OPENJSON Unterstützt derzeit nicht den JSON-Datentyp auf einigen Plattformen. Weitere Informationen finden Sie unter "Einschränkungen".

Eine vollständige Liste der JSON-Funktionen finden Sie unter JSON-Funktionen.

Indexes

Es gibt keine speziellen Indextypen für JSON-Daten.

Der JSON-Typ kann nicht als Schlüsselspalte in einer CREATE INDEX Anweisung verwendet werden. Eine JSON-Spalte kann jedoch als eingeschlossene Spalte in einer Indexdefinition angegeben werden. Darüber hinaus kann eine JSON-Spalte in der WHERE Klausel eines gefilterten Indexes angezeigt werden.

Conversion

Explizite Konvertierung mithilfe CAST oder CONVERT aus dem JSON-Typ kann in zeichen-, nchar-, varchar- und nvarchar-Typen erfolgen. Alle impliziten Konvertierungen sind nicht zulässig, ähnlich dem Verhalten von XML. Ebenso können nur Char, nchar, varchar und nvarchar explizit in den JSON-Datentyp konvertiert werden.

Der JSON-Datentyp kann nicht mit dem sql_variant Typ verwendet oder einer sql_variant Variablen oder Spalte zugewiesen werden. Diese Einschränkung ähnelt varchar(max), varbinary(max), nvarchar(max), xml und CLR-basierten Datentypen.

Sie können vorhandene Spalten wie varchar(max) in json konvertieren.ALTER TABLE Ähnlich wie der XML-Datentyp können Sie eine JSON-Spalte nicht in eine der Zeichenfolgen- oder Binärtypen konvertieren, die verwendet ALTER TABLEwerden.

Weitere Informationen finden Sie unter Datentypkonvertierung (Datenbankmodul).

Compatibility

Der JSON-Datentyp kann als Parameter oder Rückgabetyp in einer benutzerdefinierten Funktion oder als Parameter einer gespeicherten Prozedur verwendet werden. Der JSON-Typ ist mit Triggern und Ansichten kompatibel.

Derzeit enthält das systemeigene Format des bcp-Tools das JSON-Dokument als varchar oder nvarchar. Sie müssen eine Formatdatei angeben, um eine JSON-Spalte festzulegen.

Die Erstellung des Aliastyps, CREATE TYPE der für den JSON-Datentyp verwendet wird, ist nicht zulässig. Dieses Verhalten entspricht dem XML-Datentyp .

Die Verwendung SELECT ... INTO mit dem JSON-Datentyp erstellt eine Tabelle mit dem JSON-Typ .

Limitations

Das Verhalten eines CAST ( ... AS JSON)JSON-Datentyps gibt zurück, aber die gespeicherte sp_describe_first_result_set Systemprozedur gibt den JSON-Datentyp nicht ordnungsgemäß zurück. Daher sehen viele Datenzugriffsclients und Treiber einen Varchar - oder nvarchar-Datentyp .

  • Derzeit sieht TDS >= 7,4 (mit UTF-8) varchar(max) mit Latin_General_100_bin2_utf8.
  • Derzeit sieht TDS < 7.4 nvarchar(max) mit Datenbanksortierung.

Derzeit akzeptiert die Funktion den OPENJSON()JSON-Datentyp in einigen Plattformen nicht. Derzeit handelt es sich um eine implizite Konvertierung. Konvertieren Sie explizit zuerst in "nvarchar(max) ".

Größeneinschränkungen

Größenbeschränkungen von JSON-Daten im Speicher:

Feld Einschränkung
JSON-Datentypgröße (binär) Bis zu 2 GB
Anzahl eindeutiger Schlüssel Bis zu 32K
Pro Schlüsselzeichenfolgengröße 7998 Bytes
Größe pro Zeichenfolgenwert 536870911 Bytes
Anzahl der Eigenschaften in einem Objekt Bis zu 65535
Anzahl der Elemente in einem Array Bis zu 65535
Anzahl der geschachtelten Ebenen im JSON-Dokument 128