Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Относится к: SQL Server 2016 (13.x) и более поздние версии
: Azure SQL Database
,Azure SQL Managed Instance
,Azure Synapse Analytics (только для serverless SQL pool),
SQL analytics endpoint в Microsoft Fabric
Warehouse in Microsoft Fabric
,SQL база данных в Microsoft Fabric
Используйте OPENJSON с явной схемой для возврата таблицы, отформатированной так, как указано в предложении WITH.
Ниже приведены некоторые примеры, которые используют OPENJSON с явной схемой. Дополнительные сведения см. в разделе OPENJSON (Transact-SQL).
Пример использования предложения WITH для форматирования выходных данных
Следующий запрос возвращает результаты, показанные в таблице ниже. Обратите внимание, что предложение AS JSON приводит к возврату значений в виде объектов JSON вместо скалярных значений в col5 и array_element.
DECLARE @json NVARCHAR(MAX) =
N'{"someObject":
{"someArray":
[
{"k1": 11, "k2": null, "k3": "text"},
{"k1": 21, "k2": "text2", "k4": { "data": "text4" }},
{"k1": 31, "k2": 32},
{"k1": 41, "k2": null, "k4": { "data": false }}
]
}
}'
SELECT * FROM
OPENJSON(@json, N'lax $.someObject.someArray')
WITH ( k1 int,
k2 varchar(100),
col3 varchar(6) N'$.k3',
col4 varchar(10) N'lax $.k4.data',
col5 nvarchar(MAX) N'lax $.k4' AS JSON,
array_element nvarchar(MAX) N'$' AS JSON
)
Results
| k1 | k2 | col3 | col4 | col5 | array_element |
|---|---|---|---|---|---|
| 11 | NULL | "text" | NULL | NULL | {"k1": 11, "k2": null, "k3": "text"} |
| 21 | "text2" | NULL | "text4" | { data": "text4" } | {"k1": true, "k2": "text2", "k4": { "data": "text4" } |
| 31 | "32" | NULL | NULL | NULL | {"k1": 31, "k2": 32 } |
| 41 | NULL | NULL | false | { "данные": ложь } | {"k1": 41, "k2": null, "k4": { "data": false } } |
Пример. Загрузка JSON в таблицу SQL Server.
В следующем примере загружается весь объект JSON в таблицу SQL Server.
DECLARE @json NVARCHAR(MAX) = '{
"id" : 2,
"firstName": "John",
"lastName": "Smith",
"isAlive": true,
"age": 25,
"dateOfBirth": "2015-03-25T12:00:00",
"spouse": null
}';
INSERT INTO Person
SELECT *
FROM OPENJSON(@json)
WITH (id int,
firstName nvarchar(50), lastName nvarchar(50),
isAlive bit, age int,
dateOfBirth datetime2, spouse nvarchar(50))
Дополнительные сведения о JSON в ядре СУБД SQL
Дополнительные сведения о встроенной поддержке JSON см. в следующих видео:
- JSON as a bridge between NoSQL and relational worlds (JSON как мост между NoSQL и реляционными решениями)