Dela via


JSON-datatyp

Gäller för: SQL Server 2025 (17.x) Förhandsversion av Azure SQL DatabaseAzure SQL Managed InstanceSQL Database i Förhandsversion av 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 är även tillgänglig i SQL Server 2025 (17.x) Preview.

Json-datatypen är tillgänglig under alla databaskompatibilitetsnivåer.

Note

JSON-datatypen:

  • ä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 i förhandsversion för SQL Server 2025 (17.x) Förhandsversion och SQL-databas i Infrastrukturresurser.

Ändringsmetoden

Note

Metoden modify är för närvarande i förhandsversion och är endast tillgänglig i SQL Server 2025 (17.x) Preview.

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;

Funktionsstöd

Alla JSON-funktioner stöder json-datatypen utan kodändringar eller användningsskillnad som krävs.

  • OPENJSON stö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.