Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: 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 или массивом JSON. Скалярные, логические значения и NULL значения не поддерживаются. Тип данных JSON соответствует IETF RFC 4627, который разрешает только объект JSON или массив. Тип данных JSON и все функции JSON работают только с документами JSON, совместимыми с RFC 4627.
Функцию ISJSON можно использовать для проверки строки, содержащей документ JSON, соответствует IETF RFC 8259. Документ JSON, соответствующий IETF RFC 8259, содержит только скалярное значение JSON на верхнем уровне.
Рассмотрим пример.
DECLARE @true JSON = 'true'; -- invalid
DECLARE @false JSON = 'false'; -- invalid
DECLARE @number JSON = '1234.56'; -- invalid
DECLARE @string JSON = '"contoso"'; -- invalid
DECLARE @null JSON = 'null' -- invalid
DECLARE @null JSON = NULL -- valid
DECLARE @object JSON = '{}' -- valid
DECLARE @array JSON = '[]' -- valid
Поддержка функций
Все функции 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 |