JSON-datatyp (förhandsversion)
gäller för:Azure SQL DatabaseAzure SQL Managed Instance
Den nya interna json datatyp som lagrar JSON-dokument i ett internt binärt format.
json- 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 att lagra JSON-data i 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- typ lagrar data internt 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 typ liknar alla andra SQL Server-datatyper i en tabell.
column_name JSON [NOT NULL | NULL] [CHECK(constraint_expression)] [DEFAULT(default_expression)]
json- typ 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
);
Funktionstillgänglighet
JSON-stöd introducerades först i SQL Server 2016 (13.x), främst i form av JSON-funktioner. Den nya inbyggda json--typen introducerades 2024, först på Azure SQL-plattformar.
json är tillgänglig under alla databaskompatibilitetsnivåer.
Not
JSON-datatypen finns för närvarande i förhandsversion för Azure SQL Database och Azure SQL Managed Instance (konfigurerad med Always-up-to-date uppdateringsprincip).
Funktionsstöd
Alla JSON-funktioner stöder json- typ utan kodändringar eller användningsskillnad som krävs.
En fullständig lista över JSON-funktioner finns i JSON-funktioner.
Index
Det finns inga särskilda indextyper för JSON-data.
Den 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 WHERE
-satsen i ett filtrerat index.
Omvandling
Explicit konvertering med hjälp av CAST
eller CONVERT
från json typ kan göras för att tecken, nchar, varcharoch nvarchar typer. Alla implicita konverteringar är inte tillåtna, ungefär som beteendet för XML-. På samma sätt kan endast tecken, nchar, varcharoch nvarchar uttryckligen konverteras till json typ.
Den json- typen 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), xmloch CLR-baserade datatyper.
Du kan konvertera befintliga kolumner, till exempel en varchar(max) kolumn till json- med hjälp av ALTER TABLE
. På samma sätt som XML- datatyp 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 Konvertering av datatyp.
Kompatibilitet
json- typ kan användas som parameter eller returtyp i en användardefinierad funktion eller parametern för en lagrad procedur. Den 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 datatypskolumn.
Det går inte att skapa aliastypen med hjälp av CREATE TYPE
för json typ. Det här är samma beteende som xml- typ.
Om du använder SELECT ... INTO
med JSON-typen skapas en tabell med JSON-typen.
Begränsningar
Beteendet för
CAST ( ... AS JSON)
returnerar en json- typ, men den sp_describe_first_result_set systemlagringsproceduren returnerar inte json datatyp. Därför ser många dataåtkomstklienter och drivrutin en eller nvarchar datatyp.- 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.
- För närvarande ser TDS >= 7,4 (med UTF-8) varchar(max) med
För närvarande accepterar
OPENJSON()
-funktionen inte json- typ, för närvarande är det en implicit konvertering. Konvertera explicit till nvarchar(max) först.