将包含对象数组的 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
我有 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