如何使用 openjson 读取存储在 SQL Server 中的 Json 列下方?
Posted
技术标签:
【中文标题】如何使用 openjson 读取存储在 SQL Server 中的 Json 列下方?【英文标题】:How can I read below Json column stored in SQL Server using openjson? 【发布时间】:2019-10-02 17:01:35 【问题描述】:Declare @ResponseText nvarchar(4000)
set @responseText ='
"submissions": [
"xml_id":"id_x5d94851726b470.68571510",
"fields": [
"fieldvalue":"customerEmail@xyzdomain.com","fieldid":"57282490",
"fieldvalue":"123","fieldid":"57282423",
"fieldvalue":"12345-678900","fieldid":"57282500",
"fieldvalue":"Test Message here ","fieldid":"57282564"
]
]
'
SELECT *
FROM OPENJSON (@ResponseText, '$.submissions') WITH (
ID NVARCHAR(100) '$.xml_id',
$.fields.field NVARCHAR(100) ...
)
etc 其余的所有记录?字段数组下的其余字段我得到“NULL”
【问题讨论】:
您能否将所需的结果添加到您的问题中? 【参考方案1】:你可以这样试试:
Declare @ResponseText nvarchar(4000)
set @responseText ='
"submissions": [
"xml_id":"id_x5d94851726b470.68571510",
"fields": [
"fieldvalue":"customerEmail@xyzdomain.com","fieldid":"57282490",
"fieldvalue":"123","fieldid":"57282423",
"fieldvalue":"12345-678900","fieldid":"57282500",
"fieldvalue":"Test Message here ","fieldid":"57282564"
]
]
'
--查询
SELECT A.ID
,B.*
FROM OPENJSON (@ResponseText, '$.submissions')
WITH (ID NVARCHAR(100) '$.xml_id'
,fields NVARCHAR(MAX) AS JSON) A
OUTER APPLY OPENJSON(a.fields)
WITH(fieldvalue NVARCHAR(150)
,fieldid BIGINT) B;
结果
ID fieldvalue fieldid
id_x5d94851726b470.68571510 customerEmail@xyzdomain.com 57282490
id_x5d94851726b470.68571510 123 57282423
id_x5d94851726b470.68571510 12345-678900 57282500
id_x5d94851726b470.68571510 Test Message here 57282564
简而言之:
您开始正确地使用WITH
-子句读取xml_id
。属性fields
只不过是同一级别的另一个元素。但我们将其退回AS JSON
。这将允许添加另一个APPLY OPENJSON()
,传入我们从$.fields
获得的片段并使用另一个WITH
子句来获取数组中对象的两个属性。
【讨论】:
感谢 Shnugo 的正确回答,得到了您的支持以及有用的示例和解释。非常感谢。以上是关于如何使用 openjson 读取存储在 SQL Server 中的 Json 列下方?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server OPENJSON 读取嵌套的 json
SQL Server 2016 存储过程中的串联 OPENJSON
如何实现 OPENJSON 将 JSON 代码作为列中的文本。如何在 AZURE SQL Dataware House 中的表列上使用 OPENJSON?