[英]Reading JSON file using a SQL Server 2016 query - child records issue
我有一個名為( C:\\ temp \\ test.json )的以下JSON文件,它具有一個主記錄和三個子記錄,其結構如下:
[{
"dc:type":{
"dc:title":"AMC",
"dc:type":"recordType",
"rdf:resource":"https://tmkl.at1/16777434"
},
"dc:title":"CCP00113620",
"RM_Approved_on":"2011-12-19T13:04:36Z",
"Title":"RAM PROGRAM PLAN",
"Project":{
"oslc_cm:label":"HTLS",
"rdf:resource":"https://tmkl.at1/16789988-34271859"
},
"Drawing":"N",
"Attachments":{
"oslc_cm:results":[
{
"rdf:about":"https://tmkl.at1/16777434-33668052/field/Attachments/attachment/16782994-34738717",
"dc:type":{
"dc:title":"AMC",
"dc:type":"recordType",
"rdf:resource":"https://tmkl.at1./16777434"
},
"dc:title":"Doc-review-sheet-CCP00113620.xls",
"filename":"Doc-1234-CCP00113620.xls"
},
{
"rdf:about":"https://tmkl.at1/16777434-33668052/field/Attachments/attachment/16782994-34736984",
"dc:type":{
"dc:title":"AMC",
"dc:type":"recordType",
"rdf:resource":"https://tmkl.at1./16777434"
},
"dc:title":"Doc-review-sheet-CCP00113620-JD.xls",
"filename":"Doc-CCP00113620-JD300.xls"
},
{
"rdf:about":"https://tmkl.at1/16777434-33668052/field/Attachments/attachment/16782994-34738722",
"dc:type":{
"dc:title":"AMC",
"dc:type":"recordType",
"rdf:resource":"https://tmkl.at1./16777434"
},
"dc:title":"3CU 05007 0009 UMZZA-Rev01-B_edited.doc",
"filename":"UMZZA-Rev01-B_edited.doc"
}
],
"oslc_cm:collref":"https://tmkl.at1/16777434-33668052/field/Attachments"
},
"rdf:about":"https://tmkl.at1/16777434-33668052"
},
{
"dc:type":{
"dc:title":"AMC",
"dc:type":"recordType",
"rdf:resource":"https://tmkl.at1./16777434"
}]
我想使用sql SQL Server 2016查詢讀取此文件( C:\\ temp \\ test.json ),並獲得以下結果:
id Project Title Filename Web-address
CCP00113620 HTLS RAM PROGRAM PLAN Doc-1234-CCP00113620.xls https://tmkl.at1/16777434-33668052/field/Attachments/attachment/16782994-34738717
CCP00113620 HTLS RAM PROGRAM PLAN Doc-CCP00113620-JD300.xls https://tmkl.at1/16777434-33668052/field/Attachments/attachment/16782994-34736984
CCP00113620 HTLS RAM PROGRAM PLAN UMZZA-Rev01-B_edited.doc https://tmkl.at1/16777434-33668052/field/Attachments/attachment/16782994-34738722
我嘗試了以下查詢:
SELECT ecn_att.*,q1.*
FROM OPENROWSET (BULK 'd:\temp\ecn_att.json', SINGLE_CLOB) as j
CROSS APPLY OPENJSON(BulkColumn)
WITH(
[id] [varchar](16),
[Project] [varchar](200),
[Title] [varchar](200),
[Attachments] nvarchar(max) AS JSON
) AS ecn_att
CROSS APPLY OPENJSON ([Attachments])
WITH (
[dc:type] [varchar](max)
) as Q1
我無法獲得兒童記錄
這是返回預期結果的正確查詢。 棘手的部分是將子元素的名稱[oslc_cm:results]用雙引號引起來:
SELECT ecn_att.*,q1.* FROM OPENROWSET (BULK 'd:\temp\ecn_att.json', SINGLE_CLOB) as j
CROSS APPLY OPENJSON(BulkColumn)
WITH(
[id] [varchar](16),
[Project] [varchar](200),
[Title] [varchar](200),
[Attachments] nvarchar(max) AS JSON
) AS ecn_att
CROSS APPLY OPENJSON ([Attachments],'$."oslc_cm:results"') WITH ([filename] nvarchar(max), [rdf:about] nvarchar(max)) as Q1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.