Чтение массива json в строки в SQL Server - PullRequest
0 голосов
/ 25 января 2019

Учитывая приведенные ниже примеры данных json, как я могу написать запрос, чтобы получить данные массива за один шаг?Моя цель - иметь по одной строке для каждого элемента в массиве ActionRecs (4).Мой настоящий JSON более сложный, но я думаю, что это хороший пример моей цели.

declare @json2 nvarchar(max)
set @json2 = '{
    "RequestId": "1",
    "ActionRecs": [
        {
            "Type": "Submit",
            "Employee": "Joe"
        },
        {
            "Type": "Review",
            "Employee": "Betty"
        },
        {
            "Type": "Approve",
            "Employee": "Sam"
        },
        {
            "Type": "Approve",
            "Employee": "Bill"
        }
    ]
}'

SELECT x.*
, JSON_QUERY(@json2, '$.ActionRecs') as ActionArray
from OPENJSON(@json2) 
with (Id varchar(5) '$.RequestId') as x

Query Reults

1 Ответ

0 голосов
/ 25 января 2019

Один из возможных подходов - использовать OPENJSON() и CROSS APPLY:

DECLARE @json nvarchar(max)
SET @json = '{
    "RequestId": "1",
    "ActionRecs": [
        {
            "Type": "Submit",
            "Employee": "Joe"
        },
        {
            "Type": "Review",
            "Employee": "Betty"
        },
        {
            "Type": "Approve",
            "Employee": "Sam"
        },
        {
            "Type": "Approve",
            "Employee": "Bill"
        }
    ]
}'

SELECT i.Id, a.[Type], a.[Employee]
FROM OPENJSON(@json) 
WITH (
   Id varchar(5) '$.RequestId',
   Actions nvarchar(max) '$.ActionRecs' AS JSON
) AS i
CROSS APPLY (
   SELECT *
   FROM OPENJSON(i.Actions)
   WITH (
      [Type] nvarchar(max) '$.Type',
      [Employee] nvarchar(max) '$.Employee'
   )
) a

Выход:

Id  Type    Employee
1   Submit  Joe
1   Review  Betty
1   Approve Sam
1   Approve Bill
...