Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
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 internt binärt format.
Json-typen ger en lagring med hög återgivning av JSON-dokument som är optimerade för enkel frågekörning och manipulering och ger följande fördelar jämfört med lagring av JSON-data som varchar eller nvarchar:
- Mer effektiva läsningar eftersom dokumentet redan är parsat
- Effektivare skrivningar eftersom frågan kan uppdatera enskilda värden utan att komma åt hela dokumentet
- Effektivare lagring, optimerad för komprimering
- Ingen ändring i kompatibiliteten med befintlig kod
Json-typen lagrar internt data med UTF-8-kodning, Latin1_General_100_BIN2_UTF8. 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 ) ]
Json-datatypen kan användas i kolumndefinitionen i en CREATE TABLE -instruktion. Till exempel:
CREATE TABLE Orders
(
order_id INT,
order_details JSON NOT NULL
);
Begränsningar kan anges 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
JSON-funktionsstöd introducerades först i SQL Server 2016 (13.x). Den inbyggda json-typen introducerades i Azure SQL Database och Azure SQL Managed Instance, och finns även tillgänglig i SQL Server 2025 (17.x).
Json-datatypen är tillgänglig under alla databaskompatibilitetsnivåer.
Note
- är allmänt tillgängligt för Azure SQL Database och Azure SQL Managed Instance med SQL Server 2025 eller Always-up-to-datumuppdateringsprincip.
- är en förhandsversion för SQL Server 2025 (17.x) och SQL-databasen i Fabric.
Ändringsmetoden
Note
Metoden modify är för närvarande i förhandsvisning och endast tillgänglig i SQL Server 2025 (17.x).
Json-datatypen stöder modify metoden. Använd modify för att ändra JSON-dokument som lagras i en kolumn. Metoden modify har optimeringar för att utföra ändringar på plats av data där det är möjligt, och är det bästa sättet att ändra ett JSON-dokument i en json-kolumn .
Om det nya värdet är mindre än eller lika med det befintliga värdet för JSON-strängar är det möjligt att ändra på plats.
För JSON-tal, om det nya värdet är av samma typ, eller inom intervallet för det befintliga värdet, är det möjligt att ändra på plats.
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, booleska värden 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.
Json-datatypen och alla JSON-funktioner fungerar endast med IETF RFC 4627-kompatibla JSON-dokument.
Funktionen ISJSON kan användas för att verifiera att en sträng som innehåller JSON-dokument överensstämmer med IETF RFC 8259. Ett IETF RFC 8259-överensstämmande JSON-dokument innehåller endast ett JSON-skalärt värde på den översta nivån.
Till exempel:
DECLARE @true JSON = 'true'; -- invalid
DECLARE @false JSON = 'false'; -- invalid
DECLARE @number JSON = '1234.56'; -- invalid
DECLARE @string JSON = '"contoso"'; -- invalid
DECLARE @null JSON = 'null' -- invalid
DECLARE @null JSON = NULL -- valid
DECLARE @object JSON = '{}' -- valid
DECLARE @array JSON = '[]' -- valid
Funktionsstöd
Alla JSON-funktioner stöder json-datatypen utan kodändringar eller användningsskillnad som krävs.
-
OPENJSONstöder för närvarande inte json-datatypen på vissa plattformar. Mer information finns i Begränsningar.
En fullständig lista över JSON-funktioner finns i JSON-funktioner.
Indexes
Det finns inga särskilda indextyper för JSON-data.
Json-typen kan inte användas som nyckelkolumn i en CREATE INDEX -instruktion. En json-kolumn kan dock anges som en inkluderad kolumn i en indexdefinition. Dessutom kan en json-kolumn visas i satsen för WHERE ett filtrerat index.
Conversion
Explicit konvertering med hjälp av CAST eller CONVERT från json-typen kan göras till typerna char, nchar, varchar och nvarchar . Alla implicita konverteringar tillåts inte, ungefär som xml-beteendet. På samma sätt kan endast char, nchar, varchar och nvarchar explicit konverteras till json-datatypen .
Json-datatypen kan inte användas med den sql_variant typen eller tilldelas till en sql_variant variabel eller kolumn. Den här begränsningen 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).
Compatibility
Json-datatypen kan användas som en parameter eller returtyp i en användardefinierad funktion eller parametern för en lagrad procedur. Json-typen är kompatibel med utlösare och vyer.
För närvarande innehåller bcp-verktygets interna format json-dokumentet som varchar eller nvarchar. Du måste ange en formatfil för att ange en json-kolumn .
Det går inte att skapa en aliastyp som använder CREATE TYPEför json-datatypen . Det här beteendet är detsamma som xml-datatypen .
Med hjälp av SELECT ... INTOmed json-datatypen skapas en tabell med json-typen .
Limitations
Beteendet CAST ( ... AS JSON) för returnerar en json-datatyp , men den sp_describe_first_result_set systemlagringsproceduren returnerar inte json-datatypen korrekt. Därför ser många dataåtkomstklienter och drivrutin datatypen varchar eller nvarchar .
- För närvarande ser TDS >= 7.4 (med UTF-8) varchar(max) med
Latin_General_100_bin2_utf8. - För närvarande ser TDS < 7.4 nvarchar(max) med databassortering.
OPENJSON() För närvarande accepterar inte funktionen json-datatypen på vissa plattformar. För närvarande är det en implicit konvertering. Konvertera uttryckligen till nvarchar(max) först.
- I SQL Server 2025 (17.x)
OPENJSON()stöder funktionen json. Mer information finns i Viktiga JSON-funktioner i SQL Server 2025.
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 K |
| Storlek på per nyckelsträng | 7 998 byte |
| Värdestorlek per sträng | 536870911 byte |
| Antal egenskaper i ett objekt | Upp till 65535 |
| Antal element i en matris | Upp till 65535 |
| Antal kapslade nivåer i JSON-dokument | 128 |