SQL Server Openjson将详细信息提取到表中

时间:2018-05-09 10:32:18

标签: sql-server open-json

我有以下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 :(得分:2)

将JSON转换为关系数据就像剥洋葱一样。使用OPENJSONCROSS 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;

编写此查询的方法较短,但我认为他们并不那么明确。 (如果执行计划有任何指示,使用WITH明确说明JSON的结构有助于估计内存需求。)