Sdílet prostřednictvím


Datový typ JSON

Platí pro: SQL Server 2025 (17.x) Azure SQL Database Azure SQLManaged InstanceSQL Database v Microsoft Fabric

Datový typ JSON ukládá dokumenty JSON v nativním binárním formátu.

Typ JSON poskytuje vysoce věrné úložiště dokumentů JSON optimalizovaných pro snadné dotazování a manipulaci a poskytuje následující výhody při ukládání dat JSON jako varchar nebo nvarchar:

  • Efektivnější čtení, protože dokument je již analyzován
  • Efektivnější zápisy, protože dotaz může aktualizovat jednotlivé hodnoty bez přístupu k celému dokumentu
  • Efektivnější úložiště optimalizované pro kompresi
  • Žádná změna kompatibility s existujícím kódem

Typ JSON interně ukládá data pomocí kódování UTF-8, Latin1_General_100_BIN2_UTF8. Toto chování odpovídá specifikaci JSON.

Další informace o dotazování dat JSON najdete v tématu dat JSON v SQL Serveru.

Ukázková syntaxe

Syntaxe použití pro typ JSON je podobná všem ostatním datovým typům SQL Serveru v tabulce.

column_name JSON [ NOT NULL | NULL ] [CHECK ( constraint_expression ) ] [ DEFAULT ( default_expression ) ]

Datový typ JSON lze použít v definici sloupce obsaženém CREATE TABLE v příkazu. Například:

CREATE TABLE Orders
(
    order_id INT,
    order_details JSON NOT NULL
);

Omezení lze zadat jako součást definice sloupce. Například:

CREATE TABLE Orders
(
    order_id INT,
    order_details JSON NOT NULL
        CHECK (JSON_PATH_EXISTS(order_details, '$.basket') = 1)
);

Dostupnost funkcí

Podpora funkcí JSON byla poprvé zavedena v SQL Serveru 2016 (13.x). Nativní typ json byl zaveden v Azure SQL Database a Azure SQL Managed Instance a je také dostupný v SQL Server 2025 (17.x).

Datový typ JSON je k dispozici ve všech úrovních kompatibility databáze.

Note

Datový typ JSON:

  • je obecně dostupná pro Službu Azure SQL Database a Azure SQL Managed Instance pomocí zásad aktualizaceSQL Serveru 2025 nebo Always-up-to-date.
  • je ve verzi Preview pro SQL Server 2025 (17.x) a databázi SQL v prostředcích infrastruktury.

Metoda modify

Note

Metoda modify je momentálně v náhledu a dostupná pouze v SQL Server 2025 (17.x).

Datový typ JSON podporuje metodu modify . Slouží modify k úpravě dokumentů JSON uložených ve sloupci. Metoda modify má optimalizace pro provádění místních úprav dat, pokud je to možné, a je upřednostňovaným způsobem úprav dokumentu JSON ve sloupci JSON .

U řetězců JSON platí, že pokud je nová hodnota menší nebo rovna existující hodnotě, je možné provést místní úpravy.

U čísel JSON platí, že pokud je nová hodnota stejného typu nebo v rozsahu existující hodnoty, je možné provést místní úpravy.

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;

Podpora funkcí

Všechny funkce JSON podporují datový typ JSON bez nutnosti změn kódu nebo rozdílu použití.

  • OPENJSON v současné době nepodporuje datový typ JSON na některých platformách. Další informace najdete v tématu Omezení.

Úplný seznam funkcí JSON najdete v tématu Funkce JSON.

Indexes

Pro data JSON neexistují žádné speciální typy indexů.

Typ JSON se nedá použít jako klíčový sloupec v CREATE INDEX příkazu. Sloupec JSON je však možné zadat jako zahrnutý sloupec v definici indexu. Kromě toho se sloupec JSON může zobrazit v WHERE klauzuli filtrovaného indexu.

Conversion

Explicitní převod pomocí CAST typu CONVERT nebo z tohoto typu je možné provést pro typy char, nchar, varchar a nvarchar. Všechny implicitní převody nejsou povoleny, podobně jako chování xml. Podobně lze explicitně převést pouze znak, nchar, varchar a nvarchar na datový typ JSON.

Datový typ JSON nelze použít s sql_variant typem ani přiřazeným sql_variant proměnnou nebo sloupcem. Toto omezení se podobá varchar(max), varbinary(max), nvarchar(max), xml a datovým typům založeným na CLR.

Existující sloupce, jako je varchar(max), můžete převést na json pomocí ALTER TABLE. Podobně jako u datového typu XML nemůžete převést sloupec JSON na žádný z řetězců nebo binárních typů pomocí ALTER TABLE.

Další informace naleznete v tématu Převod datových typů (databázový stroj).

Compatibility

Datový typ JSON lze použít jako parametr nebo návratový typ v uživatelem definované funkci nebo parametr uložené procedury. Typ JSON je kompatibilní s triggery a zobrazeními.

V současné době nativní formát nástroje bcp obsahuje dokument JSON jako varchar nebo nvarchar. K určení sloupce JSON je nutné zadat formátový soubor.

Vytvoření typu aliasu pro CREATE TYPE datový typ JSON není povoleno. Toto chování je stejné jako datový typ XML .

Použití SELECT ... INTO s datovým typem JSON vytvoří tabulku s typem JSON .

Limitations

Chování CAST ( ... AS JSON) vrací datový typ JSON , ale uložená procedura systému sp_describe_first_result_set nevrací správně datový typ JSON . Mnoho klientů a ovladačů pro přístup k datům proto vidí datový typ varchar nebo nvarchar .

  • TDS >= 7,4 (s UTF-8) v současné době vidí varchar(max) s Latin_General_100_bin2_utf8.
  • TDS < 7.4 v současné době vidí nvarchar(max) s kolací databáze.

OPENJSON() V současné době funkce nepřijímá datový typ JSON v některých platformách. V současné době se jedná o implicitní převod. Nejprve explicitně převést na nvarchar(max).

Omezení velikosti

Omezení velikosti dat JSON v úložišti:

Obor Omezení
Velikost datového typu JSON (binární) Až 2 GB
Počet jedinečných klíčů Až 32 tisíc
Velikost řetězce klíče 7998 bajtů
Velikost hodnoty řetězce 536870911 bajtů
Počet vlastností v jednom objektu Až 65535
Počet prvků v jednom poli Až 65535
Počet vnořených úrovní v dokumentu JSON 128