簡體   English   中英

使用SQL Server 2016查詢讀取JSON文件-子記錄問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM