Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database w usłudze Microsoft Fabric
Typ danych json przechowuje dokumenty JSON w formacie binarnym.
Typ json zapewnia wysokiej jakości przechowywanie dokumentów JSON zoptymalizowane do zapytań i manipulacji. Oferuje następujące zalety w porównaniu do przechowywania danych JSON jako varchar lub nvarchar:
- Bardziej efektywne odczyty, ponieważ dokument jest już parsowany.
- Bardziej wydajne zapisy, ponieważ zapytanie może aktualizować pojedyncze wartości bez dostępu do całego dokumentu.
- Bardziej wydajne przechowywanie, zoptymalizowane pod kątem kompresji.
- Brak zmian w kompatybilności z istniejącym kodem.
Typ json wewnętrznie przechowuje ciągi znaków za pomocą kodowania UTF-8 ().Latin1_General_100_BIN2_UTF8 Inne typy danych są przechowywane jako natywne typy danych. To zachowanie jest zgodne ze specyfikacją JSON.
Aby uzyskać więcej informacji na temat wykonywania zapytań dotyczących danych JSON, zobacz dane JSON w programie SQL Server.
Przykładowa składnia
Składnia użycia typu json jest podobna do wszystkich innych typów danych programu SQL Server w tabeli.
column_name JSON [ NOT NULL | NULL ] [CHECK ( constraint_expression ) ] [ DEFAULT ( default_expression ) ]
Użyj typu danych json w definicji kolumny zawartej w CREATE TABLE instrukcji. Przykład:
CREATE TABLE Orders
(
order_id INT,
order_details JSON NOT NULL
);
Określ ograniczenia jako część definicji kolumny. Przykład:
CREATE TABLE Orders
(
order_id INT,
order_details JSON NOT NULL
CHECK (JSON_PATH_EXISTS(order_details, '$.basket') = 1)
);
Dostępność funkcji
Wsparcie dla funkcji JSON zostało wprowadzone w SQL Server 2016 (13.x). Wbudowany typ danych json jest dostępny w Azure SQL Database, Azure SQL Managed Instance oraz SQL Server 2025 (17.x).
Więcej informacji o wsparciu JSON w SQL Server 2025 (17.x) można znaleźć w artykule Kluczowe możliwości JSON w SQL Server 2025.
Typ danych JSON jest dostępny na wszystkich poziomach zgodności bazy danych.
Note
Typy danych json i indeksy JSON są zazwyczaj dostępne w SQL Server 2025 (17.x), Azure SQL Database, Azure SQL Managed Instance (z polityką aktualizacjiSQL Server 2025 lub Always-up-to-date) oraz bazą danych SQL w Microsoft Fabric.
Metoda modify
Typ danych JSON obsługuje metodę modify . Użyj do modify zmiany dokumentów JSON przechowywanych w kolumnie. Metoda obejmuje modify optymalizacje, które wprowadzają modyfikacje danych na miejscu, gdy to możliwe. To preferowany sposób modyfikacji dokumentu JSON w kolumnie json .
Dla łańcuchów JSON, jeśli nowa wartość ma tę samą długość lub krótszą niż istniejąca, metoda może modyfikować dane na miejscu.
W przypadku liczb JSON, jeśli nowa wartość jest tego samego typu lub mieści się w zakresie istniejącej wartości, metoda może modyfikować dane na miejscu.
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;
Prawidłowe dane
Dane wejściowe typu danych JSON muszą być obiektem JSON lub tablicą JSON. Skalary, wartości boole i NULL wartości nie są obsługiwane. Typ danych JSON jest zgodny z standardem IETF RFC 4627, który zezwala tylko na obiekt lub tablicę JSON.
Użyj funkcji ISJSON , aby sprawdzić, czy ciąg znaków zawiera poprawne JSON. Bez ograniczenia typu akceptuje ISJSON tylko obiekt lub tablicę JSON na najwyższym poziomie, tak jak typ danych JSON . Ograniczenie VALUE typu akceptuje dowolną wartość JSON na najwyższym poziomie, w tym skalar, zgodnie z możliwością IETF RFC 8259. Ograniczenia ARRAY, OBJECT, i SCALAR typu akceptują tylko ten typ.
Przykład:
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
Obsługa funkcji
Wszystkie funkcje JSON obsługują typ danych json bez konieczności zmian kodu.
Aby uzyskać pełną listę funkcji JSON, zobacz Funkcje JSON.
Indexes
Kolumna json może być kolumną zawartą w definicji indeksu lub pojawić się w klauzuli WHERE indeksu filtrowanego. Kolumna json nie może być używana jako kolumna klucza w standardowym indeksie.
Aby uzyskać więcej informacji, zobacz CREATE INDEX.
W Azure SQL Database, Azure SQL Managed Instance, SQL Server 2025 (17.x) oraz bazie danych SQL w Microsoft Fabric możesz utworzyć indeks JSON, aby zoptymalizować zapytania uzyskujące wartości w dokumentach JSON.
Aby uzyskać więcej informacji, zobacz CREATE JSON INDEX.
Conversion
Konwersja z json na char, nchar, varchar i nvarchar musi być jednoznaczna. Użyj CAST lub CONVERT.
Przeliczenie z char, nchar, varchar, nvarchar i vector do json może być domyślne lub jawne. Konwersja z json na wektor może być również domyślna lub jawna.
Konwersja między json a wszystkimi innymi typami danych nie jest dozwolona.
Wartoś, którą konwertujesz na json , musi być obiektem JSON lub tablicą JSON. Skalar JSON, taki jak 1, "abc", true, lub null, powoduje błąd 13609. Pusty ciąg powoduje również błąd 13609. Jeśli obiekt ma zduplikowane klucze, json zachowuje pierwszą wartość, a pozostałe odrzuca. Nie występuje błąd.
Konwersja z json na typ ciągu znaków zwraca tekst JSON bez zbędnej przerwy. Jeśli docelowa długość jest zbyt krótka dla tekstu JSON, pojawia się błąd 13639. Wartość nie jest obcięta.
Nie można używać typu danych JSON z typem sql_variant ani przypisanym do zmiennej lub kolumny sql_variant. To ograniczenie jest podobne do typów danych opartych na varchar(max),varbinary(max),nvarchar(max), xml oraz CLR.
Istniejące kolumny, takie jak varchar(max) można przekonwertować na format json przy użyciu polecenia ALTER TABLE. Podobnie jak w przypadku typu danych XML , nie można przekonwertować kolumny JSON na dowolny ciąg lub typy binarne przy użyciu polecenia ALTER TABLE.
Aby uzyskać więcej informacji, zobacz Konwersja typów danych (aparat bazy danych).
Precyzja numeryczna
Po konwersji na json z char, nchar, varchar lub nvarchar, tekst JSON zawierający numer JSON można zaokrąglić w zależności od formatu liczby.
Jeśli musisz zachować precyzję, podaj numer JSON jako wartość dziesiętną. Podobnie, jeśli chcesz zachować reprezentację tekstową dokumentu JSON, przechowuj dokument JSON jako typ danych znaków.
Compatibility
Możesz użyć typu danych json jako parametru lub typu return w funkcji zdefiniowanej przez użytkownika, albo jako parametru procedury przechowywanej. Typ json jest zgodny z wyzwalaczami i widokami.
Obecnie natywny format narzędzia bcp reprezentuje dane json jako varchar lub nvarchar. Musisz określić plik formatu, aby wyznaczyć kolumnę json .
Nie możesz utworzyć typu aliasu dla typu danych json z CREATE TYPE. To zachowanie jest takie samo jak typ danych XML .
Użycie SELECT ... INTO z typem danych JSON tworzy tabelę z typem json .
Limitations
CAST i CONVERT zwróć typ danych JSON , zgodnie z oczekiwaniami.
Ograniczenia sterowników
Procedura sp_describe_first_result_set systemowego przechowywania prawidłowo zwraca typ danych JSON , jeśli sterownik obsługuje rozszerzenie JSONSUPPORT funkcji TDS. Sterowniki, które nie obsługują tego rozszerzenia, widzą varchar lub nvarchar .
Obsługa JSONSUPPORTSqlClient (>= 6.0) i JDBC (>= 13.2.0). Na przykład najnowsza wersja SQL Server Management Studio (SSMS) korzysta z najnowszego sterownika SqlClient i poprawnie raportuje typ json w metadanych zestawu wyników.
- Bez , TDS >= 7,4 (z UTF-8) raportuje varchar
JSONSUPPORT(max) z .Latin1_General_100_BIN2_UTF8 - Bez
JSONSUPPORT, TDS < 7.4 raportuje nvarchar(max) za pomocą zestawienia bazy danych.
Ograniczenia rozmiaru plików
Limity rozmiaru danych JSON w magazynie:
| (No changes needed) | Limitation |
|---|---|
| Rozmiar typu danych JSON (binarny) | Do 2 GB |
| Liczba unikatowych kluczy | Do 32 000 |
| Rozmiar ciągu klucza | 7 998 bajtów |
| Rozmiar wartości na ciąg | 536 870 911 bajtów |
| Liczba właściwości w jednym obiekcie | Do 65 535 |
| Liczba elementów w jednej tablicy | Do 65 535 |
| Liczba poziomów zagnieżdżonych w dokumencie JSON | 128 |