Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Относится к: SQL Server 2016 (13.x) и более поздних версиях
; Azure SQL Database
,Azure SQL Managed Instance
,Azure Synapse Analytics (только для serverless SQL pool),
SQL аналитический конечный пункт в Microsoft Fabric
; Склад в Microsoft Fabric
,SQL база данных в Microsoft Fabric
Функция OPENJSON набора строк преобразует текст JSON в набор строк и столбцов. После преобразования коллекции JSON в набор OPENJSONстрок можно запустить любой SQL-запрос к возвращаемым данным или вставить его в таблицу SQL Server. Дополнительные сведения о работе с данными JSON в СУБД SQL Server см. статью JSON data in SQL Server.
Функция OPENJSON принимает один объект JSON или коллекцию объектов JSON и преобразует их в одну или несколько строк. По умолчанию OPENJSON функция возвращает следующие данные:
- Из объекта JSON функция возвращает все пары "ключ-значение", которые она находит на первом уровне.
- Из массива JSON она возвращает все элементы массива вместе с их индексами.
Можно добавить необязательное WITH предложение, чтобы предоставить схему, которая явно определяет структуру выходных данных.
OPENJSON с выходными данными по умолчанию
При использовании функции OPENJSON без предоставления явной схемы для результатов, то есть без WITH после OPENJSON, функция возвращает таблицу со следующими тремя столбцами:
- Свойство
nameвходного объекта (или индекс элемента в входном массиве). -
valueдля свойства или элемента массива. - (
typeнапример, строка, число, логическое значение, массив или объект).
OPENJSON возвращает каждое свойство объекта JSON или каждый элемент массива в виде отдельной строки.
В примере ниже используется OPENJSON с использованием схемы по умолчанию без необязательного WITH предложения, и возвращается одна строка для каждого свойства объекта JSON.
DECLARE @json NVARCHAR(MAX);
SET @json='{ "name": "John", "surname": "Doe", "age": 45, "skills": [ "SQL", "C#", "MVC" ]}';
SELECT *
FROM OPENJSON(@json);
Вот набор результатов.
| key | value | type |
|---|---|---|
name |
John |
1 |
surname |
Doe |
1 |
age |
45 |
2 |
skills |
[ "SQL" ,"C#" ,"MVC" ] |
4 |
Дополнительные сведения и примеры см. в разделе "Использование OPENJSON" с схемой по умолчанию.
Сведения о синтаксисе и использовании см. в разделе OPENJSON.
Выходные данные OPENJSON с явной структурой
При указании схемы результатов с помощью WITH предложения OPENJSON функции функция возвращает таблицу только с столбцами, заданными в предложении WITH . В необязательном WITH предложении указывается набор выходных столбцов, их типов и пути исходных свойств JSON для каждого выходного значения.
OPENJSON Выполняет итерацию по массиву объектов JSON, считывает значение по указанному пути для каждого столбца и преобразует значение в указанный тип.
В следующем примере OPENJSON используется со схемой выходных данных, которую вы явно задаете в выражении WITH.
DECLARE @json NVARCHAR(MAX);
SET @json = N'[
{
"Order": {
"Number": "SO43659",
"Date": "2024-05-31T00:00:00"
},
"AccountNumber": "AW29825",
"Item": {
"Price": 2024.9940,
"Quantity": 1
}
},
{
"Order": {
"Number": "SO43661",
"Date": "2024-06-01T00:00:00"
},
"AccountNumber": "AW73565",
"Item": {
"Price": 2024.9940,
"Quantity": 3
}
}
]';
SELECT *
FROM OPENJSON(@json) WITH (
Number VARCHAR(200) '$.Order.Number',
DATE DATETIME '$.Order.Date',
Customer VARCHAR(200) '$.AccountNumber',
Quantity INT '$.Item.Quantity'
);
Вот набор результатов.
| Number | Date | Customer | Quantity |
|---|---|---|---|
SO43659 |
2024-05-31T00:00:00 |
AW29825 |
1 |
SO43661 |
2024-06-01T00:00:00 |
AW73565 |
3 |
Эта функция возвращает и форматирует элементы массива JSON.
Для каждого элемента в массиве
OPENJSONJSON создается новая строка в выходной таблице. Два элемента в массиве JSON конвертируются в две строки в таблице результатов.Для каждого столбца, указанного с помощью синтаксиса
colName type json_path,OPENJSONпреобразует значение, найденное в каждом элементе массива по указанному пути к указанному типу. В этом примере значения для столбцаDateберутся из каждого элемента в пути$.Order.Dateи преобразуются в значения даты и времени.
Дополнительные сведения и примеры см. статью Использование OPENJSON с явной схемой.
Сведения о синтаксисе и использовании см. в разделе OPENJSON.
OPENJSON требует уровень совместимости 130
Функция OPENJSON доступна только на уровне 130 совместимости и больше.
Если уровень совместимости базы данных ниже130, SQL Server не может найти и запустить функциюOPENJSON. Другие встроенные функции JSON доступны на всех уровнях совместимости.
Уровень совместимости можно проверить в sys.databases представлении или в свойствах базы данных, а также изменить уровень совместимости базы данных с помощью следующей команды:
ALTER DATABASE <DatabaseName> SET COMPATIBILITY_LEVEL = 130;
Связанный контент
- JSON as a bridge between NoSQL and relational worlds (JSON как мост между NoSQL и реляционными решениями)
- OPENJSON (Transact-SQL)