将包含对象数组的 json 文件从文件加载到 SQL

Load json file with object array into SQL from file

我有 json 格式的文件,我正在尝试加载到 SQL Server 2019 table。其中两个字段具有我想要加载的对象数组,这些数组被解析为单独的行,并且没有括号、引号和 leading/trailing 空格。

json 文件的内容类似于

[
{
"TIN": "1234",
"clinic_name": "Acme clinic",
"specialties": [
            "Hand Surgery",
            "Orthopedic Surgery"
        ],
"languages_spoken": [
            "English",
            "Spanish"
        ],
"approval_date": "2020-02-18",
},
{
"TIN": "5678",
"clinic_name": "Elm clinic",
"specialties": [
            "Hematology & Oncology",
            "Internal Medicine"
        ],
"languages_spoken": [
            "English",
            "Russian"
        ],
"approval_date": "2020-05-17",
}
]

数组加载如下:

这是我目前拥有的:

 Declare @ProviderDirCO varchar (max)
SELECT @ProviderDirCO=BULKCOLUMN

FROM OPENROWSET (BULK 'F:\JSON\TESTProviderDirectory.json', SINGLE_CLOB) json 
insert into [Providers].ProviderDirTest_DH
 SELECT distinct
    JSON_VALUE(a.value, '$.TIN') as TIN,
    JSON_VALUE(a.value, '$.clinic_name') as clinic_name,
    JSON_QUERY(a.value, '$.specialties') as specialties,
    JSON_QUERY(a.value, '$.languages_spoken') as languages_spoken
    


    FROM OPENJSON(@ProviderDirCO ) as a

我能否将其直接加载到 SQL table 中,并且数组已经解析出来,还是需要将其加载到分段 table 中,然后从那里清理?

想通了。

    Declare @ProviderDirCO varchar (max)
SELECT @ProviderDirCO=BULKCOLUMN

FROM OPENROWSET (BULK 'F:\JSON\TESTProviderDirectory.json', SINGLE_CLOB) json 
insert into [Providers].[ProviderDirTest_DH]
 SELECT 
    JSON_VALUE(a.value, '$.TIN') as TIN,
    JSON_VALUE(a.value, '$.clinic_name') as clinic_name,
    b.specialties,
    c.languages_spoken



    FROM OPENJSON(@ProviderDirCO ) as a
 CROSS APPLY OPENJSON(value, '$.specialties')
 WITH (
    specialties NVARCHAR(100) '$'
    )
 as b
  CROSS APPLY OPENJSON(value, '$.languages_spoken')
 WITH (
    languages_spoken NVARCHAR(100) '$'
    )
 as c