Delen via


JSON-gegevenstype

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

Het systeemeigen json-gegevenstype waarin JSON-documenten in een systeemeigen binaire indeling worden opgeslagen.

De 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 in 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 type json- kan worden gebruikt in de kolomdefinitie in een CREATE TABLE-instructie, bijvoorbeeld:

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

Beperkingen kunnen worden opgegeven als onderdeel van de kolomdefinitie, bijvoorbeeld:

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 systeemeigen type json is in 2024 geïntroduceerd in Azure SQL Database en Azure SQL Managed Instance.

json- is beschikbaar onder alle databasecompatibiliteitsniveaus.

Notitie

Het JSON-gegevenstype:

  • is algemeen beschikbaar voor Azure SQL Database en Azure SQL Managed Instance die zijn geconfigureerd met het always-up-to-datum-updatebeleid.
  • is in preview voor SQL Server 2025 (17.x) Preview.

methode wijzigen

Notitie

modify de methode is momenteel beschikbaar als preview-versie en is alleen beschikbaar in SQL Server 2025 (17.x) Preview.

Het systeemeigen json-type 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-typekolom 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- type 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-functiesvoor een volledige lijst met JSON-functies.

Indexen

Er zijn geen speciale indextypen voor JSON-gegevens.

Het type json 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.

Conversie

Expliciete conversie met behulp van of van het type json kan worden uitgevoerd om tekens, nchar-, varcharen nvarchar typen te . Alle impliciete conversies zijn niet toegestaan, vergelijkbaar met het gedrag van xml-. Op dezelfde manier kunnen alleen teken, nchar, varcharen nvarchar- expliciet worden geconverteerd naar het type json-.

Het json-type 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 een varchar(max) kolom, 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 Gegevenstypeconversievoor meer informatie.

Compatibiliteit

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

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

Het maken van aliastype met CREATE TYPE voor het json--type is niet toegestaan. Dit is hetzelfde gedrag als xml- type.

Als u SELECT ... INTO gebruikt met het JSON-type, maakt u een tabel met het JSON-type.

Beperkingen

  • Het gedrag van het retourneren van CAST ( ... AS JSON) een json-type , maar de sp_describe_first_result_set systeem 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-type in sommige platforms niet. Momenteel is het een impliciete conversie. Converteer expliciet naar nvarchar(max) eerst.