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
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) mitLatin1_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 |