Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к: Sql Server 2025 (17.x)
База данных
SQL Azure Управляемого экземпляра
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 был представлен в Azure SQL Database и Azure SQL Managed Instance, а также доступен в SQL Server 2025 (17.x).
Тип данных json доступен на всех уровнях совместимости базы данных.
Note
- общедоступен для Базы данных SQL Azure и Управляемого экземпляра SQL Azure с помощью политики обновлениядаты sql Server 2025 или Always-up-to-date.
- находится в предварительной версии для SQL Server 2025 (17.x) и базы данных SQL в Fabric.
Метод изменения
Note
modify Метод в настоящее время находится в предварительном просмотре и доступен только в SQL Server 2025 (17.x).
Тип данных json поддерживает 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".
Indexes
Для данных JSON нет специальных типов индексов.
Тип json нельзя использовать в качестве ключевого столбца в инструкции CREATE INDEX . Однако столбец json можно указать как включенный столбец в определении индекса. Кроме того, столбец JSON может отображаться в WHERE предложении отфильтрованного индекса.
Conversion
Явное преобразование с помощью CAST или CONVERT из типа JSON можно выполнить для типов char, nchar, varchar и nvarchar . Все неявные преобразования не допускаются, аналогично поведению xml. Аналогичным образом можно явно преобразовать только char, nchar, varchar и nvarchar в тип данных JSON .
Тип данных json нельзя использовать с типом sql_variant или назначать sql_variant переменной или столбцу. Это ограничение похоже на varchar(max), varbinary(max), nvarchar(max), xml и типы данных на основе СРЕДЫ CLR.
Существующие столбцы, такие как varchar(max), можно преобразовать в json с помощью ALTER TABLE. Аналогично типу данных XML , нельзя преобразовать столбец JSON в любой из строковых или двоичных типов с помощью ALTER TABLE.
Дополнительные сведения см. в разделе "Преобразование типов данных" (ядро СУБД).
Compatibility
Тип данных json можно использовать в качестве параметра или возвращаемого типа в определяемой пользователем функции или параметр хранимой процедуры. Тип json совместим с триггерами и представлениями.
В настоящее время собственный формат средства bcp содержит документ JSON в виде varchar или nvarchar. Необходимо указать файл формата, чтобы назначить столбец JSON .
Создание типа псевдонима, используемого CREATE TYPE для типа данных JSON , запрещено. Это поведение совпадает с типом данных XML .
Использование SELECT ... INTO с типом данных JSON создает таблицу с типом json .
Limitations
Поведение 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) с параметрами сортировки базы данных.
OPENJSON() В настоящее время функция не принимает тип данных JSON на некоторых платформах. В настоящее время это неявное преобразование. Сначала явно преобразуйте в nvarchar(max).
- В SQL Server 2025 (17.x)
OPENJSON()функция поддерживает json. Дополнительные сведения см. в разделе "Основные возможности JSON" в SQL Server 2025.
Ограничения размера
Ограничения размера данных JSON в хранилище:
| Поле | Limitation |
|---|---|
| Размер типа данных JSON (двоичный) | До 2 ГБ |
| Количество уникальных ключей | До 32 КБ |
| Размер строки ключа | 7998 байт |
| Размер строкового значения | 536870911 байт |
| Количество свойств в одном объекте | До 65535 |
| Количество элементов в одном массиве | До 65535 |
| Количество вложенных уровней в документе JSON | 128 |