Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2025 (17.x)
AzureSQL Database Azure SQL Managed Instance
SQL-database
in Microsoft Fabric
Het json-datatype slaat JSON-documenten op in een binair formaat.
Het json-type biedt hoogwaardig opslag van JSON-documenten die geoptimaliseerd zijn voor query's en manipulatie. Het biedt de volgende voordelen ten opzichte van het opslaan van JSON-gegevens als varchar of nvarchar:
- Efficiëntere leesresultaten, omdat het document al is ontleed.
- Efficiëntere schrijfwerk, omdat de query individuele waarden kan bijwerken zonder toegang tot het hele document.
- Efficiëntere opslag, geoptimaliseerd voor compressie.
- Geen verandering in compatibiliteit met bestaande code.
Het json-type slaat intern strings op met behulp van UTF-8-codering (Latin1_General_100_BIN2_UTF8). Andere datatypes worden opgeslagen als native datatypes. 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 ) ]
Gebruik het json-datatype in een kolomdefinitie die in een CREATE TABLE statement is opgenomen. Voorbeeld:
CREATE TABLE Orders
(
order_id INT,
order_details JSON NOT NULL
);
Specificeer beperkingen 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
Ondersteuning voor JSON-functies werd geïntroduceerd in SQL Server 2016 (13.x). Het ingebouwde json-datatype is beschikbaar in Azure SQL Database, Azure SQL Managed Instance en SQL Server 2025 (17.x).
Voor meer informatie over JSON-ondersteuning in SQL Server 2025 (17.x), zie Key JSON-mogelijkheden in SQL Server 2025.
Het json-gegevenstype is beschikbaar onder alle databasecompatibiliteitsniveaus.
Note
Het JSON-datatype en de JSON-indexen zijn over het algemeen beschikbaar in SQL Server 2025 (17.x), Azure SQL Database, Azure SQL Managed Instance (met het SQL Server 2025- of Always-up-to-datumupdatebeleid), en SQL-database in Microsoft Fabric.
De wijzigingsmethode
Het json-gegevenstype ondersteunt de modify methode. Gebruik modify om JSON-documenten te wijzigen die in een kolom zijn opgeslagen. De modify methode omvat optimalisaties die, waar mogelijk, plaatselijke aanpassingen aan de data uitvoeren. Het is de voorkeursmethode om een JSON-document in een JSON-kolom te wijzigen.
Voor JSON-strings kan de methode de aanwezige data aanpassen als de nieuwe waarde even lang of korter is dan de bestaande waarde.
Voor JSON-getallen, als de nieuwe waarde hetzelfde type is of binnen het bereik van de bestaande waarde valt, kan de methode de aanwezige data aanpassen.
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;
Geldige gegevens
Invoer voor het json-gegevenstype moet een JSON-object of een JSON-matrix zijn. Scalars, booleans en NULL waarden worden niet ondersteund. Het JSON-gegevenstype voldoet aan IETF RFC 4627, waardoor alleen een JSON-object of -matrix is toegestaan.
Gebruik de ISJSON-functie om te testen of een string geldige JSON bevat. Zonder typebeperking accepteert alleen een JSON-object ISJSON of array op het hoogste niveau, hetzelfde als het JSON-datatype . De VALUE typebeperking accepteert elke JSON-waarde op het hoogste niveau, inclusief een scalair, zoals IETF RFC 8259 toestaat. De ARRAY, OBJECT, en typebeperkingen SCALAR accepteren alleen dat type.
Voorbeeld:
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
Functieondersteuning
Alle JSON-functies ondersteunen het datatype json zonder dat er codewijzigingen nodig zijn.
Zie JSON-functies voor een volledige lijst met JSON-functies.
Indexes
Een json-kolom kan een opgenomen kolom zijn in een indexdefinitie, of voorkomen in de WHERE clausule van een gefilterde index. Een json-kolom kan niet als sleutelkolom in een standaardindex worden gebruikt.
Zie CREATE INDEX voor meer informatie.
In Azure SQL Database, Azure SQL Managed Instance, SQL Server 2025 (17.x) en SQL Database in Microsoft Fabric kun je een JSON-index maken om queries te optimaliseren die waarden binnen JSON-documenten benaderen.
Zie CREATE JSON INDEX voor meer informatie.
Conversion
Conversie van json naar char, nchar, varchar en nvarchar moet expliciet zijn. Gebruik CAST of CONVERT.
Conversie van char, nchar, varchar, nvarchar en vector naar json kan impliciet of expliciet zijn. Conversie van json naar vector kan ook impliciet of expliciet zijn.
Conversie tussen json en alle andere datatypes is niet toegestaan.
Een waarde die je omzet naar JSON moet een JSON-object of een JSON-array zijn. Een JSON-scalair, zoals 1, "abc", , true, of null, veroorzaakt fout 13609. Een lege string veroorzaakt ook fout 13609. Als een object dubbele sleutels heeft, behoudt json de eerste waarde en laat de andere waarden vallen. Er treedt geen fout op.
De conversie van JSON naar een stringtype geeft de JSON-tekst zonder onbeduidende witte ruimte terug. Als de doellengte te kort is voor de JSON-tekst, treedt fout 13639 op. De waarde wordt niet ingekort.
Het json-gegevenstype kan niet worden gebruikt met het sql_variant type of toegewezen aan een sql_variant variabele of kolom. Deze beperking lijkt op die van varchar(max), varbinary(max),nvarchar(max), xml en op CLR gebaseerde datatypes.
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.
Numerieke precisie
Wanneer je van char, nchar, varchar of nvarchar naar json converteert, kan JSON-tekst met een JSON-nummer worden afgerond op basis van het nummerformaat.
Als je precisie wilt behouden, specificeer dan het JSON-nummer als decimale waarde. Evenzo, als je de tekstuele representatie van het JSON-document wilt behouden, sla dan het JSON-document op als een tekenreeks-datatype.
Compatibility
Je kunt het json-datatype gebruiken als parameter of return-type in een door de gebruiker gedefinieerde functie, of als parameter van een opgeslagen procedure. Het json-type is compatibel met triggers en weergaven.
Momenteel vertegenwoordigt het native formaat van de bcp-tooljson-gegevens als varchar of nvarchar. U moet een indelingsbestand opgeven om een json-kolom aan te wijzen.
Je kunt geen alias-type maken voor het json-datatype met CREATE TYPE. 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
CAST en CONVERT het JSON-datatype terug te geven zoals verwacht.
Beperkingen van stuurprogramma's
De sp_describe_first_result_set systeem-opgeslagen procedure geeft het json-datatype correct terug als de driver de JSONSUPPORT TDS-functie-uitbreiding ondersteunt. Drivers die deze uitbreiding niet ondersteunen, zien in plaats daarvan varchar of nvarchar .
Ondersteuning voor SqlClient (>= 6.0) en JDBC (>= 13.2.0).JSONSUPPORT Zo gebruikt de nieuwste versie van SQL Server Management Studio (SSMS) de nieuwste SqlClient-driver en rapporteert correct het json-type in de metadata van de resultaatset.
- Zonder
JSONSUPPORT, rapporteert TDS >= 7,4 (met UTF-8) varchar(max) metLatin1_General_100_BIN2_UTF8. - Zonder
JSONSUPPORT, rapporteert TDS < 7.4 nvarchar(max) met database-collatie.
Groottebeperkingen
Groottelimieten van JSON-gegevens in opslag:
| Veld | Beperking |
|---|---|
| Grootte van JSON-gegevenstype (binair) | Tot 2 GB |
| Aantal unieke sleutels | Tot 32.000 |
| Tekenreeksgrootte per sleutel | 7.998 bytes |
| Grootte van tekenreekswaarde | 536.870.911 bytes |
| Aantal eigenschappen in één object | Tot 65.535 |
| Aantal elementen in één matrix | Tot 65.535 |
| Aantal geneste niveaus in JSON-document | 128 |
Verwante inhoud
- JSON-documenten opslaan
- JSON-gegevens in SQL Server