Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2025 (17.x)
Azure SQL Database Azure SQL
Managed Instance
SQL Database v Microsoft Fabric
Datový typ json ukládá JSON dokumenty v binárním formátu.
Typ json poskytuje vysoce věrné ukládání JSON dokumentů optimalizované pro dotazování a manipulaci. Nabízí následující výhody oproti ukládání dat JSON jako varchar nebo nvarchar:
- Efektivnější čtení, protože dokument je již parsová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 se stávajícím kódem.
Typ json interně ukládá řetězce pomocí kódování UTF-8 (Latin1_General_100_BIN2_UTF8). Ostatní datové typy jsou ukládány jako nativní datové typy. 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 ) ]
Použijte datový typ json v definici sloupce obsažené ve příkazu CREATE TABLE . Například:
CREATE TABLE Orders
(
order_id INT,
order_details JSON NOT NULL
);
Specifikujte omezení 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 JSON funkcí byla zavedena v SQL Server 2016 (13.x). Vestavěný typ json je dostupný v Azure SQL Database, Azure SQL Managed Instance a SQL Server 2025 (17.x).
Pro více informací o podpoře JSON v SQL Server 2025 (17.x) viz Key JSON capabilities in SQL Server 2025.
Datový typ JSON je k dispozici ve všech úrovních kompatibility databáze.
Note
Indexy datových typů json aJSON jsou obecně dostupné v SQL Server 2025 (17.x), Azure SQL Database, Azure SQL Managed Instance (s politikou aktualizacíSQL Server 2025 nebo Always-up-to-date) a SQL databází v Microsoft Fabric.
Metoda modify
Datový typ JSON podporuje metodu modify . Použijte modify ke změně JSON dokumentů uložených ve sloupci. Metoda modify zahrnuje optimalizace, které provádějí úpravy dat přímo na místě, pokud je to možné. Je to preferovaný způsob, jak upravit JSON dokument ve sloupci json .
U JSON řetězců, pokud je nová hodnota stejně dlouhá nebo kratší než stávající, může metoda data na místě upravit.
U JSON čísel, pokud je nová hodnota stejného typu nebo zapadá do rozsahu existující hodnoty, může metoda upravit data na místě.
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;
Platná data
Vstupem do datového typu JSON musí být objekt JSON nebo pole JSON. Skaláry, booleany a hodnoty nejsou podporovány NULL . Datový typ JSON odpovídá IETF RFC 4627, což umožňuje pouze objekt nebo pole JSON.
Použijte funkci ISJSON k ověření, zda řetězec obsahuje platný JSON. Bez omezení typu přijímá ISJSON pouze objekt nebo pole JSON na nejvyšší úrovni, stejně jako datový typ json . Typové VALUE omezení přijímá jakoukoli hodnotu JSON na nejvyšší úrovni, včetně skaláru, jak to umožňuje IETF RFC 8259. Omezení ARRAY, OBJECT, a SCALAR typu přijímají pouze tento typ.
Například:
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
Podpora funkcí
Všechny JSON funkce podporují datový typ json bez nutnosti změn kódu.
Úplný seznam funkcí JSON najdete v tématu Funkce JSON.
Indexes
Sloupec json může být zahrnutý sloupec v definici indexu, nebo se objevit v klauzuli WHERE filtrovaného indexu. Sloupec json nelze použít jako sloupec klíče ve standardním indexu.
Další informace najdete na webu CREATE INDEX.
V Azure SQL Database, Azure SQL Managed Instance, SQL Server 2025 (17.x) a SQL databázi v Microsoft Fabric můžete vytvořit JSON index pro optimalizaci dotazů, které přistupují k hodnotám v JSON dokumentech.
Další informace najdete na webu CREATE JSON INDEX.
Conversion
Převod z json na char, nchar, varchar a nvarchar musí být explicitní. Použijte CAST nebo CONVERT.
Převod z char, nchar, varchar, nvarchar a vector na json může být implicitní nebo explicitní. Převod z json na vektor může být také implicitní nebo explicitní.
Převod mezi json a všemi ostatními datovými typy není povolen.
Hodnota, kterou převedete do json , musí být objekt JSON nebo pole JSON. JSON skalár, například 1, "abc", true, nebo null, způsobuje chybu 13609. Prázdný řetězec také způsobuje chybu 13609. Pokud má objekt duplicitní klíče, json si ponechá první hodnotu a ostatní hodnoty zahodí. Nedojde k žádné chybě.
Převod z json na typ řetězce vrátí JSON text bez nepatrného bílého mezery. Pokud je cílová délka příliš krátká pro text JSON, dojde k chybě 13639. Hodnota není zkrácena.
Datový typ JSON nelze použít s sql_variant typem ani přiřazeným sql_variant proměnnou nebo sloupcem. Toto omezení je podobné datovým typům založeným na varchar(max),varbinary(max), nvarchar(max), xml a 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).
Numerická přesnost
Když převedete na json z char, nchar, varchar nebo nvarchar, text JSON obsahující JSON číslo lze zaokrouhlovat podle formátu čísla.
Pokud potřebujete zachovat přesnost, zadejte JSON číslo jako desetinnou hodnotu. Podobně, pokud potřebujete zachovat textovou reprezentaci JSON dokumentu, uložite JSON dokument jako datový typ znakového řetězce.
Compatibility
Datový typ json můžete použít jako parametr nebo typ return v uživatelsky definované funkci, nebo jako parametr uložené procedury. Typ JSON je kompatibilní s triggery a zobrazeními.
V současnosti nativní formát nástroje bcp reprezentuje data json jako varchar nebo nvarchar. K určení sloupce JSON je nutné zadat formátový soubor.
Nemůžete vytvořit alias typ pro datový typ json s CREATE TYPE. Toto chování je stejné jako datový typ XML .
Použití SELECT ... INTO s datovým typem JSON vytvoří tabulku s typem JSON .
Limitations
CAST a vraťte CONVERT datový typ JSON , jak se očekává.
Omezení ovladačů
Procedura uložená v sp_describe_first_result_set systému správně vrací typ dat json , pokud ovladač podporuje JSONSUPPORT rozšíření funkce TDS. Ovladače, které toto rozšíření nepodporují, vidí místo toho varchar nebo nvarchar .
Podpora JSONSUPPORTSqlClient (>= 6.0) a JDBC (>= 13.2.0). Například nejnovější verze SQL Server Management Studio (SSMS) používá nejnovější ovladač SqlClient a správně hlásí typ json v metadatech výsledkové sady.
- Bez , TDS >= 7,4 (s UTF-8) hlásí varchar(
JSONSUPPORTmax) s .Latin1_General_100_BIN2_UTF8 - Bez
JSONSUPPORT, TDS 7.4 hlásí <nvarchar(max) s databázovou kolekcí.
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 000 |
| Velikost řetězce klíče | 7 998 bajtů |
| Velikost hodnoty řetězce | 536 870 911 bajtů |
| Počet vlastností v jednom objektu | Až 65 535 |
| Počet prvků v jednom poli | Až 65 535 |
| Počet vnořených úrovní v dokumentu JSON | 128 |