Freigeben über


JSON-Datentyp (Vorschau)

Gilt für: Azure SQL-Datenbank Azure SQL Managed Instance

Der neue native JSON-Datentyp, der JSON-Dokumente in einem nativen Binärformat speichert.

Der JSON-Typ bietet eine hochwertige Speicherung von JSON-Dokumenten, die für einfache Abfragen und Manipulation optimiert sind. Er bietet die folgenden Vorteile gegenüber dem Speichern von JSON-Daten in 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 Daten intern 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-Typ kann in der Spaltendefinition in einer CREATE TABLE-Anweisung verwendet werden, z. B.:

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

Einschränkungen können als Teil der Spaltendefinition angegeben werden, z. B.:

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

Featureverfügbarkeit

Die JSON-Unterstützung wurde zuerst in SQL Server 2016 (13.x) eingeführt, hauptsächlich in Form von JSON-Funktionen. Der neue native JSON-Typ wurde 2024 eingeführt, zuerst auf Azure SQL-Plattformen.

JSON ist unter allen Datenbankkompatibilitätsstufen verfügbar.

Hinweis

Der JSON-Datentyp befindet sich derzeit in der Vorschau für Azure SQL-Datenbank und Azure SQL verwaltete Instanz (konfiguriert mit der Always-up-to-date-Updaterichtlinie).

Funktionsunterstützung

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

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

Indizes

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 auftauchen.

Konvertierung

Die explizite Konvertierung mit CAST oder CONVERT aus dem JSON-Typ kann in die Typen char, nchar, varchar und nvarchar erfolgen. Implizite Konvertierungen sind nicht zulässig, ähnlich dem Verhalten von XML. Ebenso können nur char, nchar, varchar und nvarchar explizit in den JSON-Typ konvertiert werden.

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

Weitere Informationen finden Sie unter Datentypkonvertierung.

Kompatibilität

Der JSON-Typ 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 Anzeigen kompatibel.

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

Die Erstellung des Aliastyps mit CREATE TYPE für den JSON-Typ ist nicht zulässig. Dieses Verhalten entspricht dem XML-Typ.

Bei Verwendung von SELECT ... INTO mit dem JSON-Typ wird eine Tabelle mit dem JSON-Typ erstellt.

Begrenzungen

  • Das Verhalten von CAST ( ... AS JSON) gibt einen JSON-Typ zurück, aber die gespeicherte Systemprozedur sp_describe_first_result_set gibt nicht den richtigen JSON-Datentyp zurück. Daher sehen viele Datenzugriffsclients und -treiber einen Varchar- oder nvarchar-Datentyp.

    • Derzeit sieht TDS >= 7.4 (mit UTF-8)-Unterstützung varchar(max) mit Latin_General_100_bin2_utf8.
    • Derzeit sieht die TDS < 7.4-Unterstützung nvarchar(max) mit Datenbanksortierung.
  • Derzeit akzeptiert die OPENJSON()-Funktion den JSON-Typ nicht. Dies ist derzeit eine implizite Konvertierung. Konvertieren Sie zunächst explizit nach nvarchar(max).