Следуя документации MS, я могу получить простой пример загрузки файла json в результаты SQL.Проблемы возникают, когда у меня более одного подобъекта.Этот код будет проходить по всем элементам, если он находится на корневом уровне.Поскольку у меня есть 2 объекта в разделе «Покупка», я должен явно ссылаться на них.Есть ли более простой способ вернуть результаты для всех подобъектов?В этом случае я бы хотел две строки информации о заказе.
Также необходимо жестко закодировать имя файла в OPENROWSET
вместо использования (@file
).Любые идеи о синтаксисе, чтобы передать переменную для файла?
Код
USE TempDB
DECLARE @json AS NVARCHAR(MAX)
DECLARE @file AS NVARCHAR(MAX)
SET @file = 'c:\temp\test.json';
SELECT @json = BulkColumn FROM OPENROWSET (BULK 'c:\temp\test2.json', SINGLE_CLOB) AS j
SELECT *
FROM OPENJSON ( @json )
WITH (
Number varchar(200) '$.Purchase[0].Order.Number' ,
Date datetime '$.Purchase[0].Order.Date',
Customer varchar(200) '$.Purchase[0].AccountNumber',
Quantity int '$.Purchase[0].Item.Quantity'
)
Содержимое файла:
{
"Purchase": [
{
"Order": {
"Number": "SO43659",
"Date": "2011-05-31T00:00:00"
},
"AccountNumber": "AW29825",
"Item": {
"Price": 2024.9940,
"Quantity": 1
}
},
{
"Order": {
"Number": "SO43661",
"Date": "2011-06-01T00:00:00"
},
"AccountNumber": "AW73565",
"Item": {
"Price": 2024.9940,
"Quantity": 3
}
}
]
}
Ссылка:
https://docs.microsoft.com/en-us/sql/relational-databases/json/convert-json-data-to-rows-and-columns-with-openjson-sql-server?view=sql-server-2017#option-2---openjson-output-with-an-explicit-structure
Спасибо, Билл