Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: SQL Server 2025 (17.x) — предварительная версия
базы данных
SQLAzure Для Управляемого экземпляра
SQL Azureв Microsoft Fabric
Собственный тип данных 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 доступен на всех уровнях совместимости базы данных.
Примечание.
- общедоступен для Базы данных SQL Azure и Управляемого экземпляра SQL Azure, настроенных с помощью политики обновления Always-up-to-date.
- находится в предварительной версии для SQL Server 2025 (17.x) (предварительная версия).
Метод modify
Примечание.
modify
Метод в настоящее время доступен в предварительной версии и доступен только в ПРЕДВАРИТЕЛЬНОй версии SQL Server 2025 (17.x).
Собственный тип modify
поддерживает метод. Используется modify
для изменения документов JSON, хранящихся в столбце. Метод modify
имеет оптимизации для выполнения изменений на месте данных, где это возможно, и является предпочтительным способом изменения документа JSON в столбце типа JSON .
Для строк JSON, если новое значение меньше или равно существующему значению, возможно изменение на месте.
Для чисел JSON, если новое значение имеет тот же тип или в пределах диапазона существующего значения, возможно изменение на месте.
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;
Поддержка функций
Все функции JSON поддерживают тип JSON без изменений кода или разницы в использовании.
-
OPENJSON
В настоящее время не поддерживает тип данных 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) ALTER TABLE
.
Дополнительные сведения см. в разделе "Преобразование типов данных".
Совместимость
Тип json можно использовать в качестве параметра или возвращаемого типа в определяемой пользователем функции или параметр хранимой процедуры. Тип json совместим с триггерами и представлениями.
В настоящее время собственный формат средства bcp содержит документ JSON в виде varchar или nvarchar. Необходимо указать файл формата, чтобы назначить столбец типа данных JSON .
Создание типа псевдонима, используемого CREATE TYPE
для типа JSON , запрещено. Это то же поведение, что и тип XML .
Используя SELECT ... INTO
с типом JSON, создается таблица с типом JSON.
Ограничения
- Поведение
CAST ( ... AS JSON)
возвращает тип 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) с параметрами сортировки базы данных.
- В настоящее время TDS >= 7,4 (с UTF-8) видит varchar(max) с
-
OPENJSON()
В настоящее время функция не принимает тип JSON на некоторых платформах. В настоящее время это неявное преобразование. Сначала явно преобразуйте в nvarchar(max).- В SQL Server 2025 (предварительная версия)
OPENJSON()
функция поддерживает тип json . Дополнительные сведения см. в разделе "Основные возможности JSON" в SQL Server 2025.
- В SQL Server 2025 (предварительная версия)