Freigeben über


JSON-Datentyp

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

Der native JSON-Datentyp , der JSON-Dokumente in einem systemeigenen 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)
);

Verfügbarkeit von Funktionen

Die JSON-Funktionsunterstützung wurde erstmals in SQL Server 2016 (13.x) eingeführt. Der systemeigene JSON- Typ wurde 2024 in Azure SQL-Datenbank und azure SQL Managed Instance eingeführt.

JSON ist unter allen Datenbankkompatibilitätsstufen verfügbar.

Hinweis

Der JSON-Datentyp:

modify-Methode

Hinweis

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

Der systemeigene JSON-Typ 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 Möglichkeit, ein JSON-Dokument in einer JSON-Typspalte zu ändern.

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-Typ ohne Codeänderungen oder Verwendungsunterschiede.

  • OPENJSON Derzeit wird der JSON-Datentyp auf einigen Plattformen nicht unterstützt. Weitere Informationen finden Sie unter Einschränkungen.

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.

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

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.

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

Begrenzungen

  • Das Verhalten eines CAST ( ... AS JSON)JSON-Typs 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-Typ in einigen Plattformen nicht. Derzeit handelt es sich um eine implizite Konvertierung. Konvertieren Sie zunächst explizit nach nvarchar(max).