SQL Server Openjson для извлечения деталей в таблицу - PullRequest
0 голосов
/ 09 мая 2018

У меня есть следующий JSON и я ожидаю таблицу из него.

{
  "Response": [
    {
      "questionId": 1,
      "answer": [
        "5","6"
      ]
    },
    {
      "questionId": 2,
      "answer": [
        "5"
      ]
    }
  ]
}

И ожидаемая таблица ...

Table

Я попробовал следующее, но не смог получить именно тот результат, который мне нужен.

SELECT QuestionId,Answer FROM OPENJSON(@responseJson, N'$.Response') r
 CROSS APPLY OPENJSON (r.value) WITH ( QuestionId   varchar(200)   '$.questionId', Answer nvarchar(max) '$.answer')

1 Ответ

0 голосов
/ 09 мая 2018

Получение JSON в реляционных данных похоже на очистку лука. Используйте OPENJSON и CROSS APPLY, пока не получите все нужные слои. Используйте WITH, чтобы упростить задачу отображения значений по пути.

SELECT questions.questionId, answers.answerId AS answer
FROM OPENJSON(@responseJson, '$.Response')
WITH (
    questionId INT,
    answer NVARCHAR(MAX) AS JSON
) AS questions
CROSS APPLY OPENJSON(answer)
WITH (
    answerId INT '$'
) AS answers;

Есть более короткие способы написания этого запроса, но я бы сказал, что они не так понятны. (И если планы выполнения являются какими-либо указаниями, то явное представление о структуре JSON с использованием WITH помогает оценить потребности в памяти.)

...