Я создал функцию ParseJson
ниже:
create function ParseJson(
@json nvarchar(max))
returns @tempTable table (topKey nvarchar(max), [Key] nvarchar(max), [Value] nvarchar(max))
as
begin
insert
@tempTable
select
x.[key] topKey
, y.[key]
, y.[value]
from openjson(@json) x
cross apply openjson(x.[value]) y
return
end
-- execute
select * from ParseJson(@json)
Я определил переменную @json
, которая не является строкой массива:
set @json =
N'{
"Chapter":
{
"Section":"1.1"
, "Title":"Hello world."
}
}'
Затем я выполняюв результате запроса я получу результат:
![result_single](https://i.stack.imgur.com/aon51.png)
Если я сброшу переменную @json
, которая является строкой массива:
declare @json nvarchar(max)
set @json =
N'{
"Chapter":[
{
"Section":"1.1"
, "Title":"Hello world."
}
,
{
"Section":"1.2"
, "Title":"Be happy."
}
]
}'
Затем я выполню запрос и получу результат: ![result_array](https://i.stack.imgur.com/bhNE5.png)
Надеюсь, я смогу получить результат ниже:
![result](https://i.stack.imgur.com/QppWg.png)
Я не знаю, какой результат, на мой взгляд, является разумным?
Как настроить функцию в соответствии с ожиданиями?