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 Binärformat.

Der JSON-Typ bietet eine hochpräzise Speicherung von JSON-Dokumenten, die für Abfragen und Manipulation optimiert sind. Es bietet folgende Vorteile gegenüber der Speicherung von JSON-Daten als varchar oder nvarchar:

  • Effizientere Lesearten, da das Dokument bereits geparst ist.
  • Effizientere Schreibvorgänge, da die Abfrage einzelne Werte aktualisieren kann, ohne auf das gesamte Dokument zugreifen zu müssen.
  • Effizientere Speicherung, optimiert für Kompression.
  • Keine Veränderung der Kompatibilität mit bestehendem Code.

Der json-Typ speichert intern Strings mit UTF-8-Codierung (Latin1_General_100_BIN2_UTF8). Andere Datentypen werden als native Datentypen gespeichert. 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 ) ]

Verwenden Sie den JSON-Datentyp in einer Spaltendefinition, die in einer CREATE TABLE Anweisung enthalten ist. Beispiel:

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

Spezifiziere Einschränkungen als Teil der Spaltendefinition. 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 Unterstützung für JSON-Funktionen wurde in SQL Server 2016 (13.x) eingeführt. Der integrierte json-Datentyp ist in Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Server 2025 (17.x) verfügbar.

Weitere Informationen zur JSON-Unterstützung in SQL Server 2025 (17.x) finden Sie unter Key JSON Capabilities in SQL Server 2025.

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

Note

Der JSON-Datentyp und die JSON-Indizes sind im Allgemeinen in SQL Server 2025 (17.x), Azure SQL-Datenbank, Azure SQL Managed Instance (mit der SQL Server 2025- oder Always-up-to-Date-Update-Richtlinie) und der SQL-Datenbank in der SQL-Datenbank verfügbar. Microsoft Fabric.

Die Modify-Methode

Der JSON-Datentyp unterstützt die modify Methode. Verwenden modify Sie es, um JSON-Dokumente zu ändern, die in einer Spalte gespeichert sind. Die Methode modify beinhaltet Optimierungen, die, wenn möglich, vor Ort Änderungen an den Daten vornehmen. Das ist die bevorzugte Methode, ein JSON-Dokument in einer JSON-Spalte zu bearbeiten.

Bei JSON-Strings kann die Methode, wenn der neue Wert die gleiche oder kürzere Länge als der bestehende Wert hat, die vorhandenen Daten modifizieren.

Bei JSON-Zahlen kann die Methode, wenn der neue Wert vom gleichen Typ ist oder im Bereich des bestehenden Wertes liegt, die vorhandenen Daten modifizieren.

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;

Gültige Daten

Eingaben für den JSON-Datentyp müssen ein JSON-Objekt oder ein JSON-Array sein. Skalare, Boolesche Werte und NULL Werte werden nicht unterstützt. Der JSON-Datentyp entspricht IETF RFC 4627, der nur ein JSON-Objekt oder Array zulässt.

Verwenden Sie die ISJSON-Funktion , um zu testen, ob eine Zeichenkette gültiges JSON enthält. Ohne Typconstraint ISJSON akzeptiert nur ein JSON-Objekt oder -Array auf der obersten Ebene, genauso wie der JSON-Datentyp . Die Typbeschränkung VALUE akzeptiert jeden JSON-Wert auf der obersten Ebene, einschließlich eines Skalars, wie es IETF RFC 8259 erlaubt. Die , OBJECT, und SCALAR Typ-Einschränkungen ARRAYakzeptieren nur diesen Typ.

Beispiel:

DECLARE @true AS JSON = 'true'; -- invalid
DECLARE @false AS JSON = 'false'; -- invalid
DECLARE @number AS JSON = '1234.56'; -- invalid
DECLARE @string AS JSON = '"contoso"'; -- invalid
DECLARE @null AS JSON = 'null'; -- invalid

DECLARE @null AS JSON = NULL; -- valid
DECLARE @object AS JSON = '{}'; -- valid
DECLARE @array AS JSON = '[]'; -- valid

Funktionsunterstützung

Alle JSON-Funktionen unterstützen den JSON-Datentyp , ohne dass Codeänderungen erforderlich sind.

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

Indexes

Eine json-Spalte kann eine enthaltene Spalte in einer Indexdefinition sein oder in der WHERE Klausel eines gefilterten Index erscheinen. Eine JSON-Spalte kann nicht als Schlüsselspalte in einem Standardindex verwendet werden.

Weitere Informationen finden Sie unter CREATE INDEX.

In Azure SQL-Datenbank, Azure SQL Managed Instance, SQL Server 2025 (17.x) und SQL Database in Microsoft Fabric kann man einen JSON-Index erstellen, um Abfragen zu optimieren, die auf Werte innerhalb von JSON-Dokumenten zugreifen.

Weitere Informationen finden Sie unter CREATE JSON INDEX.

Conversion

Die Umwandlung von json zu char, nchar, varchar und nvarchar muss explizit erfolgen. Verwenden Sie CAST oder CONVERT.

Die Umwandlung von Char, nchar, varchar, nvarchar und Vector zu JSON kann implizit oder explizit sein. Die Umwandlung von JSON zu Vektor kann ebenfalls implizit oder explizit sein.

Die Umwandlung zwischen JSON und allen anderen Datentypen ist nicht erlaubt.

Ein Wert, den du in JSON umwandelst, muss ein JSON-Objekt oder ein JSON-Array sein. Ein JSON-Skalar wie 1, "abc", , true, oder null, verursacht den Fehler 13609. Eine leere Zeichenkette verursacht ebenfalls den Fehler 13609. Wenn ein Objekt doppelte Schlüssel hat, behält json den ersten Wert und verwirft die anderen Werte. Es tritt kein Fehler auf.

Die Umwandlung von JSON in einen Zeichenfolgentyp gibt den JSON-Text ohne unbedeutenden Leerraum zurück. Ist die Ziellänge für den JSON-Text zu kurz, tritt der Fehler 13639 auf. Der Wert wird nicht verkürzt.

Der JSON-Datentyp kann nicht mit dem sql_variant Typ verwendet oder einer sql_variant Variablen oder Spalte zugewiesen werden. Diese Einschränkung ähnelt den von 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).

Numerische Präzision

Wenn du von char, nchar, varchar oder nvarchar in JSON konvertierst, kann JSON-Text mit einer JSON-Zahl basierend auf dem Zahlenformat gerundet werden.

Wenn Sie die Genauigkeit beibehalten möchten, geben Sie die JSON-Zahl als Dezimalwert an. Ebenso gilt: Wenn Sie die textuelle Darstellung des JSON-Dokuments erhalten müssen, speichern Sie das JSON-Dokument als Zeichenzeichenstring-Datentyp.

Compatibility

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

Derzeit stellt das native Format des BCP-Toolsjson-Daten als varchar oder nvarchar dar. Sie müssen eine Formatdatei angeben, um eine JSON-Spalte festzulegen.

Du kannst keinen Alias-Typ für den JSON-Datentyp mit CREATE TYPEerstellen. Dieses Verhalten entspricht dem XML-Datentyp .

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

Limitations

CAST und CONVERT den JSON-Datentyp wie erwartet zurückzugeben.

Treiberbeschränkungen

Die sp_describe_first_result_set systemgespeicherte Prozedur gibt den json-Datentyp korrekt zurück, wenn der Treiber die JSONSUPPORT TDS-Funktionserweiterung unterstützt. Treiber, die diese Erweiterung nicht unterstützen, sehen stattdessen varchar oder nvarchar .

SqlClient (>= 6.0) und JDBC (>= 13.2.0) unterstützen JSONSUPPORT. Zum Beispiel verwendet die neueste Version von SQL Server Management Studio (SSMS) den neuesten SQLClient-Treiber und meldet den JSON-Typ korrekt in den Metadaten der Ergebnismenge.

  • Ohne JSONSUPPORT, meldet TDS >= 7,4 (mit UTF-8) varchar(max) mit Latin1_General_100_BIN2_UTF8.
  • Ohne JSONSUPPORT, meldet TDS < 7.4 nvarchar(max) mit Datenbank-Zusammenstellung.

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 32.000
Pro Schlüsselzeichenfolgengröße 7.998 Bytes
Größe pro Zeichenfolgenwert 536.870.911 Bytes
Anzahl der Eigenschaften in einem Objekt Bis zu 65.535
Anzahl der Elemente in einem Array Bis zu 65.535
Anzahl der geschachtelten Ebenen im JSON-Dokument 128