Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database i Microsoft Fabric
JSON-datatypen lagrar JSON-dokument i ett binärt format.
JSON-typen ger högupplöst lagring av JSON-dokument optimerade för förfrågningar och manipulation. Den erbjuder följande fördelar jämfört med att lagra JSON-data som varchar eller nvarchar:
- Mer effektiva läsningar, eftersom dokumentet redan är parsartat.
- Effektivare skrivningar, eftersom frågan kan uppdatera individuella värden utan att behöva komma åt hela dokumentet.
- Effektivare lagring, optimerad för komprimering.
- Ingen förändring i kompatibilitet med befintlig kod.
JSON-typen lagrar strängar internt med UTF-8-kodning (Latin1_General_100_BIN2_UTF8). Andra datatyper lagras som inhemska datatyper. Det här beteendet matchar JSON-specifikationen.
Mer information om hur du frågar efter JSON-data finns i JSON-data i SQL Server.
Exempelsyntax
Användningssyntaxen för json-typen liknar alla andra SQL Server-datatyper i en tabell.
column_name JSON [ NOT NULL | NULL ] [CHECK ( constraint_expression ) ] [ DEFAULT ( default_expression ) ]
Använd json-datatypen i en kolumndefinition som finns i ett CREATE TABLE uttalande. Till exempel:
CREATE TABLE Orders
(
order_id INT,
order_details JSON NOT NULL
);
Specificera begränsningar som en del av kolumndefinitionen. Till exempel:
CREATE TABLE Orders
(
order_id INT,
order_details JSON NOT NULL
CHECK (JSON_PATH_EXISTS(order_details, '$.basket') = 1)
);
Tillgänglighet av funktioner
Stöd för JSON-funktioner introducerades i SQL Server 2016 (13.x). Den inbyggda json-datatypen finns tillgänglig i Azure SQL Database, Azure SQL Managed Instance och SQL Server 2025 (17.x).
För mer information om JSON-stöd i SQL Server 2025 (17.x), se Key JSON-funktioner i SQL Server 2025.
Json-datatypen är tillgänglig under alla databaskompatibilitetsnivåer.
Note
JSON-datatypen och JSON-indexen är generellt tillgängliga i SQL Server 2025 (17.x), Azure SQL Database, Azure SQL Managed Instance (med SQL Server 2025 eller Alltid-up-to-datumuppdateringspolicyn, samt SQL-databasen i Microsoft Fabric.
Ändringsmetoden
Json-datatypen stöder modify metoden. Använd modify för att ändra JSON-dokument som lagras i en kolumn. Metoden modify inkluderar optimeringar som utför lokala ändringar i datan när det är möjligt. Det är det föredragna sättet att ändra ett JSON-dokument i en JSON-kolumn .
För JSON-strängar, om det nya värdet är lika långt eller kortare än det befintliga, kan metoden modifiera den aktuella datan.
För JSON-tal, om det nya värdet är av samma typ eller passar inom intervallet för det befintliga värdet, kan metoden modifiera den befintliga datan.
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;
Giltiga data
Indata till json-datatypen måste vara ett JSON-objekt eller en JSON-matris. Skalärer, booleaner och NULL värden stöds inte. JSON-datatypen överensstämmer med IETF RFC 4627 som endast tillåter ett JSON-objekt eller en matris.
Använd ISJSON-funktionen för att testa om en sträng innehåller giltig JSON. Utan typbegränsning ISJSON accepterar endast ett JSON-objekt eller array på toppnivå, samma som JSON-datatypen . Typbegränsningen VALUE accepterar alla JSON-värden på högsta nivå, inklusive en skalär, som IETF RFC 8259 tillåter. , ARRAYOBJECT, och SCALAR typbegränsningarna accepterar endast den typen.
Till exempel:
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
Funktionsstöd
Alla JSON-funktioner stöder json-datatypen utan att behöva kodändringar.
En fullständig lista över JSON-funktioner finns i JSON-funktioner.
Indexes
En json-kolumn kan vara en inkluderad kolumn i en indexdefinition, eller förekomma i klausulen WHERE i ett filtrerat index. En json-kolumn kan inte användas som nyckelkolumn i ett standardindex.
Mer information finns i CREATE INDEX.
I Azure SQL Database, Azure SQL Managed Instance, SQL Server 2025 (17.x) och SQL database i Microsoft Fabric kan du skapa ett JSON-index för att optimera frågor som får tillgång till värden inom JSON-dokument.
Mer information finns i CREATE JSON INDEX.
Conversion
Konvertering från json till char, nchar, varchar och nvarchar måste vara explicit. Använd CAST eller CONVERT.
Konvertering från char, nchar, varchar, nvarchar och vektor till json kan vara implicit eller explicit. Konvertering från json till vektor kan också vara implicit eller explicit.
Konvertering mellan json och alla andra datatyper är inte tillåten.
Ett värde som du konverterar till JSON måste vara ett JSON-objekt eller en JSON-array. En JSON-skalär, såsom 1, "abc", , true, eller null, orsakar fel 13609. En tom sträng orsakar också felmeddelande 13609. Om ett objekt har dubblettnycklar behåller json det första värdet och slänger de andra värdena. Inget fel inträffar.
Konvertering från JSON till strängtyp returnerar JSON-texten utan obetydlig vitplats. Om mål-längden är för kort för JSON-texten uppstår fel 13639. Värdet är inte förkortat.
Json-datatypen kan inte användas med den sql_variant typen eller tilldelas till en sql_variant variabel eller kolumn. Denna begränsning liknar varchar(max), varbinary(max),nvarchar(max), xml och CLR-baserade datatyper.
Du kan konvertera befintliga kolumner som varchar(max) till json med hjälp av ALTER TABLE. På samma sätt som xml-datatypen kan du inte konvertera en json-kolumn till någon av sträng- eller binärtyperna med hjälp av ALTER TABLE.
Mer information finns i Datatypskonvertering (databasmotor).
Numerisk precision
När du konverterar till JSON från char, nchar, varchar eller nvarchar kan JSON-text som innehåller ett JSON-tal avrundas baserat på talformatet.
Om du behöver behålla precisionen, ange JSON-numret som ett decimalt värde. På samma sätt, om du behöver bevara den textuella representationen av JSON-dokumentet, lagra JSON-dokumentet som en teckensträngsdatatyp.
Compatibility
Du kan använda json-datatypen som en parameter eller returtyp i en användardefinierad funktion, eller som parametern för en lagrad procedur. Json-typen är kompatibel med utlösare och vyer.
För närvarande representerar bcp-verktygets inbyggda format json-data som varchar eller nvarchar. Du måste ange en formatfil för att ange en json-kolumn .
Du kan inte skapa en aliastyp för json-datatypen med CREATE TYPE. Det här beteendet är detsamma som xml-datatypen .
Med hjälp av SELECT ... INTOmed json-datatypen skapas en tabell med json-typen .
Limitations
CAST och CONVERT returnera JSON-datatypen som förväntat.
Begränsningar för drivrutin
Den sp_describe_first_result_set systemlagrade proceduren returnerar json-datatypen korrekt om drivrutinen stöder JSONSUPPORT TDS-funktionstillägget. Drivrutiner som inte stödjer denna tillägg ser istället varchar eller nvarchar .
SqlClient (>= 6.0) och JDBC (>= 13.2.0) stödjer JSONSUPPORT. Till exempel använder den senaste versionen av SQL Server Management Studio (SSMS) den senaste SqlClient-drivrutinen och rapporterar korrekt json-typen i metadata från resultatuppsättningen.
- Utan
JSONSUPPORT, rapporterar TDS >= 7,4 (med UTF-8) varchar(max) medLatin1_General_100_BIN2_UTF8. - Utan
JSONSUPPORT, rapporterar TDS < 7.4 nvarchar(max) med databassortering.
Storleksbegränsningar
Storleksgränser för JSON-data i lagring:
| Fält | Limitation |
|---|---|
| Storlek på JSON-datatyp (binär) | Upp till 2 GB |
| Antal unika nycklar | Upp till 32 000 |
| Storlek på per nyckelsträng | 7 998 byte |
| Värdestorlek per sträng | 536 870 911 byte |
| Antal egenskaper i ett objekt | Upp till 65 535 |
| Antal element i en matris | Upp till 65 535 |
| Antal kapslade nivåer i JSON-dokument | 128 |