Поделиться через


Тип данных JSON (предварительная версия)

Применимо к: База данных SQL Azure Управляемый экземпляр SQL Azure

Новый собственный тип данных JSON , в который хранятся документы JSON в собственном двоичном формате.

Тип json предоставляет высокодокументное хранилище документов JSON, оптимизированных для простых запросов и манипуляций, и обеспечивает следующие преимущества при хранении данных JSON в varchar или nvarchar:

  • Более эффективные операции чтения, так как документ уже анализируется
  • Более эффективные операции записи, так как запрос может обновлять отдельные значения без доступа ко всему документу
  • Более эффективное хранилище, оптимизированное для сжатия
  • Отсутствие изменений в совместимости с существующим кодом

Тип json внутренне сохраняет данные с помощью кодировки UTF-8. Latin1_General_100_BIN2_UTF8 Это поведение соответствует спецификации JSON.

Дополнительные сведения о запросе данных JSON см. в статье JSON data in SQL Server.

Пример синтаксиса

Синтаксис использования для типа JSON аналогичен всем другим типам данных SQL Server в таблице.

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

Тип json можно использовать в определении столбцов, содержащихся в инструкции CREATE TABLE , например:

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

Ограничения можно указать как часть определения столбца, например:

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

Доступность функций

Поддержка функций JSON впервые появилась в SQL Server 2016 (13.x). Собственный тип json появился в 2024 году в Базе данных SQL Azure и Управляемом экземпляре SQL Azure.

json доступен на всех уровнях совместимости базы данных.

Примечание.

В настоящее время тип данных JSON находится в предварительной версии для базы данных SQL Azure и Управляемого экземпляра SQL Azure, настроенных с помощью Always-up-to-date политики обновления. Он недоступен в Управляемом экземпляре SQL Azure, настроенный с помощью политики обновленияSQL Server 2022 обновления.

Поддержка функций

Все функции JSON поддерживают тип JSON без изменений кода или разницы в использовании.

Полный список функций JSON см. в разделе "Функции JSON".

Индексы

Для данных JSON нет специальных типов индексов.

Тип json нельзя использовать в качестве ключевого столбца в инструкции CREATE INDEX . Однако столбец json можно указать как включенный столбец в определении индекса. Кроме того, столбец JSON может отображаться в WHERE предложении отфильтрованного индекса.

Преобразование

Явное преобразование с помощью или из типа JSON можно выполнить для CAST, CONVERT, varchar и nvarchar. Все неявные преобразования не допускаются, аналогично поведению xml. Аналогичным образом можно явно преобразовать только char, nchar, varchar и nvarchar в тип json.

Тип json нельзя использовать с типом sql_variant или назначить sql_variant переменной или столбцу. Это ограничение похоже на varchar(max), varbinary(max), nvarchar(max), xml и типы данных на основе СРЕДЫ CLR.

Можно преобразовать существующие столбцы, например столбец varchar(max) в json с помощью . Аналогично типу данных xml xml, нельзя преобразовать столбец json в любой из строковых или двоичных типов с помощью ALTER TABLE.

Дополнительные сведения см. в разделе "Преобразование типов данных".

Совместимость

Тип json можно использовать в качестве параметра или возвращаемого типа в определяемой пользователем функции или параметр хранимой процедуры. Тип json совместим с триггерами и представлениями.

В настоящее время собственный формат средства bcp содержит документ JSON в виде varchar или nvarchar. Необходимо указать файл формата, чтобы назначить столбец типа данных JSON .

Создание типа псевдонима, используемого CREATE TYPEдля типа JSON , запрещено. Это то же поведение, что и тип XML .

Используя SELECT ... INTO с типом JSON, создается таблица с типом JSON.

Ограничения

  • Поведение возвращает тип json, но CAST ( ... AS JSON) sp_describe_first_result_set системная хранимая процедура не возвращает тип данных JSON. Таким образом, многие клиенты и драйвер доступа к данным увидят тип данных varchar или nvarchar .

    • В настоящее время TDS >= 7,4 (с UTF-8) видит varchar(max) с Latin_General_100_bin2_utf8.
    • В настоящее время TDS < 7.4 видит nvarchar(max) с параметрами сортировки базы данных.
  • OPENJSON() В настоящее время функция не принимает тип JSON, который в настоящее время является неявным преобразованием. Сначала явно преобразуйте в nvarchar(max).