Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: 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 доступен в База данных SQL Azure, Управляемый экземпляр SQL Azure и SQL Server 2025 (17.x).
Для получения дополнительной информации о поддержке JSON в SQL Server 2025 (17.x) см. раздел Ключевые возможности JSON в SQL Server 2025.
Тип данных json доступен на всех уровнях совместимости базы данных.
Note
Тип данных json и индексы JSON обычно доступны в SQL Server 2025 (17.x), База данных SQL Azure, Управляемый экземпляр SQL Azure (с политикой обновления SQL Server 2025 или Al-up-to -date обновления, а также SQL базой данных в Microsoft Fabric.
Метод изменения
Тип данных 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 или массив.
Используйте функцию ISJSON для проверки, содержит ли строка допустимый JSON. Без ограничения по типу ISJSON принимает только JSON-объект или массив на верхнем уровне, аналогичный типу данных json . Типовое VALUE ограничение принимает любое значение JSON на верхнем уровне, включая скаляр, как это позволяет IETF RFC 8259.
ARRAYОграничения , OBJECT, и SCALAR типов принимают только этот тип.
Рассмотрим пример.
DECLARE @true AS JSON = 'true'; -- invalid
DECLARE @false AS JSON = 'false'; -- invalid
DECLARE @number AS JSON = '1234.56'; -- invalid
DECLARE @string AS JSON = '"contoso"'; -- invalid
DECLARE @null AS JSON = 'null'; -- invalid
DECLARE @null AS JSON = NULL; -- valid
DECLARE @object AS JSON = '{}'; -- valid
DECLARE @array AS JSON = '[]'; -- valid
Поддержка функций
Все функции JSON поддерживают тип данных json без необходимости изменения кода.
Полный список функций JSON см. в разделе "Функции JSON".
Indexes
Столбец json может быть включённым столбцем в определении индекса или появляться в WHERE клаузе фильтрованного индекса.
Столбец json нельзя использовать как ключевой столбец в стандартном индексе.
Дополнительные сведения см. в разделе CREATE INDEX.
В База данных SQL Azure, Azure SQL SQL Managed Instance, SQL Server 2025 (17.x) и SQL Database в Microsoft Fabric вы можете создать индекс JSON для оптимизации запросов, обращающихся к значениям внутри JSON-документов.
Дополнительные сведения см. в разделе CREATE JSON INDEX.
Conversion
Конвертация из json в char, nchar, varchar и nvarchar должна быть явной. Используйте CAST или CONVERT.
Преобразование из char, nchar, varchar, nvarchar и vector в json может быть как неявным, так и явным. Преобразование из json в вектор может быть как неявным, так и явным.
Конвертация между json и всеми другими типами данных запрещена.
Значение, которое вы конвертируете в json , должно быть объектом JSON или массивом JSON. JSON-скаляр, такой 1как , "abc", true, или null, вызывает ошибку 13609. Пустая строка также вызывает ошибку 13609. Если у объекта дублирующиеся ключи, json сохраняет первое значение и отбрасывает остальные значения. Ошибка не возникает.
Преобразование из json в тип строки возвращает JSON-текст без незначительных белых пробелов. Если целевая длина слишком коротка для JSON-текста, возникает ошибка 13639. Стоимость не усекается.
Тип данных json нельзя использовать с типом sql_variant или назначать sql_variant переменной или столбцу. Это ограничение похоже на типы данных на основе varchar(max), varbinary(max), nvarchar(max), xml и CLR-основания.
Существующие столбцы, такие как varchar(max), можно преобразовать в json с помощью ALTER TABLE. Аналогично типу данных XML , нельзя преобразовать столбец JSON в любой из строковых или двоичных типов с помощью ALTER TABLE.
Дополнительные сведения см. в разделе "Преобразование типов данных" (ядро СУБД).
Числовая точность
При конвертации в json из char, nchar, varchar или nvarchar JSON-текст с JSON-номером можно округлять в зависимости от формата номера.
Если нужно сохранить точность, укажите число JSON в виде десятичного значения. Аналогично, если нужно сохранить текстовое представление JSON-документа, храните JSON-документ как тип строк символов.
Compatibility
Вы можете использовать тип данных json как параметр или тип возврата в пользовательской функции, либо как параметр сохранённой процедуры. Тип json совместим с триггерами и представлениями.
В настоящее время родной формат bcp представляет json данные как varchar или nvarchar. Необходимо указать файл формата, чтобы назначить столбец JSON .
Нельзя создать псевдоним для типа данных json с CREATE TYPE. Это поведение совпадает с типом данных XML .
Использование SELECT ... INTO с типом данных JSON создает таблицу с типом json .
Limitations
CAST и CONVERT возвращать тип данных JSON , как ожидается.
Ограничения драйвера
Процедура сохранения sp_describe_first_result_set системы правильно возвращает тип данных json , если драйвер поддерживает расширение JSONSUPPORT функции TDS. Водители, которые не поддерживают это расширение, смотрят varchar или nvarchar .
Поддержка JSONSUPPORTSqlClient (>= 6.0) и JDBC (>= 13.2.0). Например, последняя версия SQL Server Management Studio (SSMS) использует последний драйвер SqlClient и корректно отображает тип json в метаданных результатов.
- Без
JSONSUPPORT, TDS >= 7.4 (с UTF-8) отражает varchar(max) сLatin1_General_100_BIN2_UTF8. - Без , TDS < 7.4 сообщает
JSONSUPPORTо nvarchar(max) с сопоставлением базы данных.
Ограничения размера
Ограничения размера данных JSON в хранилище:
| Поле | Limitation |
|---|---|
| Размер типа данных JSON (двоичный) | До 2 ГБ |
| Количество уникальных ключей | До 32 000 |
| Размер строки ключа | 7 998 байт |
| Размер строкового значения | 536 870 911 байт |
| Количество свойств в одном объекте | До 65 535 |
| Количество элементов в одном массиве | До 65 535 |
| Количество вложенных уровней в документе JSON | 128 |