Delen via


JSON-gegevenstype

Van toepassing op: SQL Server 2025 (17.x) AzureSQL Database Azure SQL Managed InstanceSQL-databasein Microsoft Fabric

Het json-gegevenstype slaat JSON-documenten op in een systeemeigen binaire indeling.

Het json-type biedt een hoogwaardige opslag van JSON-documenten die zijn geoptimaliseerd voor eenvoudige query's en manipulatie en biedt de volgende voordelen ten opzichte van het opslaan van JSON-gegevens als varchar of nvarchar:

  • Efficiëntere leesbewerkingen, omdat het document al wordt geparseerd
  • Efficiëntere schrijfbewerkingen, omdat de query afzonderlijke waarden kan bijwerken zonder het hele document te openen
  • Efficiëntere opslag, geoptimaliseerd voor compressie
  • Geen wijziging in compatibiliteit met bestaande code

Het json-type slaat gegevens intern op met behulp van UTF-8-codering, Latin1_General_100_BIN2_UTF8. Dit gedrag komt overeen met de JSON-specificatie.

Zie JSON-gegevens in SQL Servervoor meer informatie over het uitvoeren van query's op JSON-gegevens.

Voorbeeldsyntaxis

De gebruiksyntaxis voor het json-type is vergelijkbaar met alle andere SQL Server-gegevenstypen in een tabel.

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

Het json-gegevenstype kan worden gebruikt in de kolomdefinitie in een CREATE TABLE instructie. Voorbeeld:

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

Beperkingen kunnen worden opgegeven als onderdeel van de kolomdefinitie. Voorbeeld:

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

Beschikbaarheid van functies

JSON-functieondersteuning is voor het eerst geïntroduceerd in SQL Server 2016 (13.x). Het native json-type werd geïntroduceerd in Azure SQL Database en Azure SQL Managed Instance, en is ook beschikbaar in SQL Server 2025 (17.x).

Het json-gegevenstype is beschikbaar onder alle databasecompatibiliteitsniveaus.

Note

Het JSON-gegevenstype:

  • is algemeen beschikbaar voor Azure SQL Database en Azure SQL Managed Instance met het beleid voor SQL Server 2025 of Always-up-to-dateupdate.
  • is in preview voor SQL Server 2025 (17.x) en SQL-database in Fabric.

De wijzigingsmethode

Note

De modify methode is momenteel in preview en alleen beschikbaar in SQL Server 2025 (17.x).

Het json-gegevenstype ondersteunt de modify methode. Hiermee modify kunt u JSON-documenten wijzigen die zijn opgeslagen in een kolom. De modify methode heeft optimalisaties om waar mogelijk in-place wijzigingen in de gegevens uit te voeren en is de voorkeurswijze om een JSON-document in een json-kolom te wijzigen.

Als voor JSON-tekenreeksen de nieuwe waarde kleiner is dan of gelijk is aan de bestaande waarde, is in-place aanpassing mogelijk.

Als voor JSON-getallen de nieuwe waarde van hetzelfde type is of binnen het bereik van de bestaande waarde, is in-place wijziging mogelijk.

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;

Functieondersteuning

Alle JSON-functies ondersteunen het JSON-gegevenstype zonder dat er codewijzigingen of gebruiksverschillen nodig zijn.

  • OPENJSON biedt momenteel geen ondersteuning voor het json-gegevenstype op sommige platforms. Zie Beperkingen voor meer informatie.

Zie JSON-functies voor een volledige lijst met JSON-functies.

Indexes

Er zijn geen speciale indextypen voor JSON-gegevens.

Het json-type kan niet worden gebruikt als sleutelkolom in een CREATE INDEX instructie. Een json-kolom kan echter worden opgegeven als een opgenomen kolom in een indexdefinitie. Daarnaast kan een json-kolom worden weergegeven in de WHERE component van een gefilterde index.

Conversion

Expliciete conversie met CAST of CONVERT van het json-type kan worden uitgevoerd voor char-, nchar-, varchar- en nvarchar-typen . Alle impliciete conversies zijn niet toegestaan, vergelijkbaar met het gedrag van XML. Op dezelfde manier kunnen alleen tekens, nchar, varchar en nvarchar expliciet worden geconverteerd naar het json-gegevenstype .

Het json-gegevenstype kan niet worden gebruikt met het sql_variant type of toegewezen aan een sql_variant variabele of kolom. Deze beperking is vergelijkbaar met varchar(max), varbinary(max), nvarchar(max), xml en CLR-gegevenstypen.

U kunt bestaande kolommen zoals varchar(max) converteren naar json met behulp van ALTER TABLE. Net als bij het xml-gegevenstype kunt u een json-kolom niet converteren naar een van de tekenreeks- of binaire typen met behulp van ALTER TABLE.

Zie Conversie van gegevenstypen (Database Engine) voor meer informatie.

Compatibility

Het json-gegevenstype kan worden gebruikt als parameter of retourtype in een door de gebruiker gedefinieerde functie of de parameter van een opgeslagen procedure. Het json-type is compatibel met triggers en weergaven.

Momenteel bevat de systeemeigen indeling van het bcp-hulpprogramma het json-document als varchar of nvarchar. U moet een indelingsbestand opgeven om een json-kolom aan te wijzen.

Het maken van het aliastype dat wordt gebruikt CREATE TYPE voor het json-gegevenstype is niet toegestaan. Dit gedrag is hetzelfde als het xml-gegevenstype .

Als SELECT ... INTO u het json-gegevenstype gebruikt, wordt er een tabel gemaakt met het json-type .

Limitations

Het gedrag van het retourneren van CAST ( ... AS JSON) een JSON-gegevenstype , maar de sp_describe_first_result_set opgeslagen procedure retourneert het JSON-gegevenstype niet correct. Daarom zien veel clients en stuurprogramma's voor gegevenstoegang een varchar - of nvarchar-gegevenstype .

  • Momenteel ziet TDS >= 7,4 (met UTF-8) varchar(max) met Latin_General_100_bin2_utf8.
  • Momenteel ziet TDS < 7.4 nvarchar(max) met databasesortering.

Op dit moment accepteert de OPENJSON() functie het json-gegevenstype op sommige platforms niet. Momenteel is het een impliciete conversie. Converteer expliciet eerst naar nvarchar(max).

Groottebeperkingen

Groottelimieten van JSON-gegevens in opslag:

Veld Beperking
Grootte van JSON-gegevenstype (binair) Maximaal 2 GB
Aantal unieke sleutels Maximaal 32K
Tekenreeksgrootte per sleutel 7998 bytes
Grootte van tekenreekswaarde 536870911 bytes
Aantal eigenschappen in één object Tot 65535
Aantal elementen in één matrix Tot 65535
Aantal geneste niveaus in JSON-document 128