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

Posted

技术标签:

【中文标题】SQL Server Openjson 将详细信息提取到表中【英文标题】:SQL Server Openjson to fetch details into a table 【发布时间】:2018-05-09 10:32:18 【问题描述】:

我有以下 JSON 并期望从中得到一个表格。


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

还有预期的表...

我尝试了以下内容,但没有找到我正在寻找的确切输出。

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

【问题讨论】:

欢迎来到 SO。发布问题时,人们希望您提出问题(惊喜!:))。你的是什么?您已经尝试过什么来回答您的问题? 可能重复:***.com/questions/37218254/… 【参考方案1】:

将 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 的结构有助于估计内存需求。)

【讨论】:

以上是关于SQL Server Openjson 将详细信息提取到表中的主要内容,如果未能解决你的问题,请参考以下文章

如何反转 SQL Server 中的 OPENJSON() 函数?

SQL Server 2016 OPENJSON忽略大小写

SQL Server中的OpenJson用于嵌套的json数据?

OPENJSON 在 SQL Server 中不起作用?

如何从 SQL Server 中的动态节点加载 OPENJSON

SQL Server openjson