Udostępnij za pośrednictwem


Typ danych JSON (wersja zapoznawcza)

Dotyczy:azure SQL Databaseazure SQL Managed Instance

Nowy natywny json typ danych, który 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 w 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 dla 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 json może być używany w definicji kolumny zawartej w instrukcji , na przykład:

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

Ograniczenia można określić jako część definicji kolumny, na 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 2024 r. w usługach Azure SQL Database i Azure SQL Managed Instance.

json jest dostępna na wszystkich poziomach zgodności bazy danych.

Nuta

Typ danych JSON jest obecnie w wersji zapoznawczej dla usług Azure SQL Database i Azure SQL Managed Instance (skonfigurowany z Always-up-to-date update policy).

Obsługa funkcji

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

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

Indeksy

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

Nie można użyć typu json jako kolumny klucza w instrukcji . Jednak kolumna json może być określona jako dołączona kolumna w definicji indeksu. Ponadto kolumna json może pojawić się w klauzuli indeksu filtrowanego.

Konwersja

Jawna konwersja przy użyciu lub z typu json można wykonać w celu char, nchar, varchari nvarchar typów. Wszystkie niejawne konwersje nie są dozwolone, podobnie jak zachowanie xml. Podobnie tylko char , nchar, varchari nvarchar można jawnie przekonwertować na typ json.

Nie można użyć typu json z typem sql_variant ani przypisanym do zmiennej lub kolumny sql_variant. To ograniczenie podobne do varchar(max), varbinary(max), nvarchar(max), xmli opartych na clR typów danych.

Istniejące kolumny, takie jak varchar(max) kolumny, można przekonwertować na json przy użyciu ALTER TABLE. Podobnie jak typ danych xml , nie można przekonwertować kolumny json na dowolny z typów ciągów lub plików binarnych przy użyciu .

Aby uzyskać więcej informacji, zobacz konwersji typu danych.

Zgodność

Typ 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. Należy określić plik formatu, aby wyznaczyć kolumnę typu danych json.

Tworzenie typu aliasu przy użyciu CREATE TYPE dla typu json nie jest dozwolone. Jest to takie samo zachowanie jak typ xml .

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

Ograniczenia

  • Zachowanie zwraca typ json , ale procedura składowana systemu sp_describe_first_result_set nie zwraca typu danych json. W związku z tym wielu klientów i sterowników dostępu do danych zobaczy varchar lub nvarchar typu danych.

    • Obecnie >TDS = 7.4 (z utF-8) widzi varchar(max) z Latin_General_100_bin2_utf8.
    • Obecnie usługa TDS < 7.4 widzi nvarchar(max) z sortowaniem bazy danych.
  • Obecnie funkcja OPENJSON() nie akceptuje typu json, który jest obecnie niejawną konwersją. Jawnie przekonwertuj nvarchar(max).