Udostępnij za pomocą


Typ danych JSON

Dotyczy: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL Database w usłudze Microsoft Fabric

Typ danych JSON przechowuje dokumenty JSON w natywnym formacie binarnym.

Typ JSON zapewnia wysokiej wierności magazyn dokumentów JSON zoptymalizowany pod kątem łatwego wykonywania zapytań i manipulowania nimi oraz zapewnia następujące korzyści wynikające z przechowywania danych JSON jako varchar lub nvarchar:

  • Wydajniejsze operacje odczytu, ponieważ dokument jest już analizowany
  • Wydajniejsze zapisy, ponieważ zapytanie może aktualizować poszczególne wartości bez uzyskiwania dostępu do całego dokumentu
  • Wydajniejszy magazyn zoptymalizowany pod kątem kompresji
  • Brak zmian w zgodności z istniejącym kodem

Typ json wewnętrznie przechowuje dane przy użyciu kodowania UTF-8, Latin1_General_100_BIN2_UTF8. 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 ) ]

Typ danych JSON może być używany w definicji kolumny zawartej w instrukcji CREATE TABLE . Przykład:

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

Ograniczenia można określić 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

Obsługa funkcji JSON została po raz pierwszy wprowadzona w programie SQL Server 2016 (13.x). Natywny typ json został wprowadzony w Azure SQL Database oraz Azure SQL Managed Instance, a jest również dostępny w SQL Server 2025 (17.x).

Typ danych JSON jest dostępny na wszystkich poziomach zgodności bazy danych.

Note

Typ danych JSON:

  • jest ogólnie dostępna dla usług Azure SQL Database i Azure SQL Managed Instance z zasadami aktualizacjiprogramu SQL Server 2025 lub Always-up-to-date.
  • program jest w wersji zapoznawczej dla programu SQL Server 2025 (17.x) i bazy danych SQL w usłudze Fabric.

Metoda modify

Note

Metoda jest modify obecnie w wersji podglądowej i dostępna tylko w SQL Server 2025 (17.x).

Typ danych JSON obsługuje metodę modify . Służy modify do modyfikowania dokumentów JSON przechowywanych w kolumnie. Metoda modify ma optymalizacje do przeprowadzania modyfikacji w miejscu danych tam, gdzie to możliwe, i jest preferowanym sposobem modyfikowania dokumentu JSON w kolumnie json .

W przypadku ciągów JSON, jeśli nowa wartość jest mniejsza lub równa istniejącej wartości, modyfikacja w miejscu jest możliwa.

W przypadku liczb JSON, jeśli nowa wartość jest tego samego typu lub w zakresie istniejącej wartości, modyfikacja w miejscu jest możliwa.

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;

Obsługa funkcji

Wszystkie funkcje JSON obsługują typ danych JSON bez zmian kodu ani różnicy użycia.

  • OPENJSON obecnie nie obsługuje typu danych JSON na niektórych platformach. Aby uzyskać więcej informacji, zobacz Ograniczenia.

Aby uzyskać pełną listę funkcji JSON, zobacz Funkcje JSON.

Indexes

Brak specjalnych typów indeksów dla danych JSON.

Nie można użyć typu json jako kolumny klucza w instrukcji CREATE INDEX . Kolumnę json można jednak określić jako dołączona kolumna w definicji indeksu. Ponadto kolumna json może pojawić się w WHERE klauzuli filtrowanego indeksu.

Conversion

Jawna konwersja przy użyciu CAST lub CONVERT z typu json można wykonać do typów char, nchar, varchar i nvarchar . Wszystkie niejawne konwersje nie są dozwolone, podobnie jak zachowanie pliku XML. Podobnie tylko char, nchar, varchar i nvarchar można jawnie przekonwertować na typ danych json .

Nie można używać typu danych JSON z typem sql_variant ani przypisanym do zmiennej lub kolumny sql_variant. To ograniczenie podobne do varchar(max), varbinary(max), nvarchar(max), xml i CLR oparte na danych.

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).

Compatibility

Typ danych JSON może być używany jako parametr lub zwracany typ w funkcji zdefiniowanej przez użytkownika lub parametr procedury składowanej. Typ json jest zgodny z wyzwalaczami i widokami.

Obecnie natywny format narzędzia bcp zawiera dokument json jako varchar lub nvarchar. Musisz określić plik formatu, aby wyznaczyć kolumnę json .

Tworzenie typu aliasu przy użyciu CREATE TYPE dla typu danych json nie jest dozwolone. To zachowanie jest takie samo jak typ danych XML .

Użycie SELECT ... INTO z typem danych JSON tworzy tabelę z typem json .

Limitations

Zachowanie zwraca CAST ( ... AS JSON) typ danych JSON , ale procedura składowana systemu sp_describe_first_result_set nie zwraca poprawnie typu danych JSON . W związku z tym wiele klientów i sterowników dostępu do danych widzi typ danych varchar lub nvarchar .

  • Obecnie TDS >= 7.4 (z utF-8) widzi varchar(max) z Latin_General_100_bin2_utf8.
  • Obecnie TDS < 7.4 widzi nvarchar(max) z sortowaniem bazy danych.

OPENJSON() Obecnie funkcja nie akceptuje typu danych JSON na niektórych platformach. Obecnie jest to niejawna konwersja. Jawnie przekonwertuj na nvarchar(max) najpierw.

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 Maksymalnie 32K
Rozmiar ciągu klucza 7998 bajtów
Rozmiar wartości na ciąg 536870911 bajty
Liczba właściwości w jednym obiekcie Do 65535
Liczba elementów w jednej tablicy Do 65535
Liczba poziomów zagnieżdżonych w dokumencie JSON 128