我正在尝试使用SQL Server的“ OPENJSON WITH(...”语法)将JSON文件插入表中。但是,此文件包含嵌套数组,我不知道该如何处理。
这是我的JSON文件:
}
"Person_ID":["7120","4816","6088"],
"Occupant_Type":["ADT","SCD","MCD"],
"Occupant_Gender":["M","F","M"],
"Occupant_Height":[180,102,127],
"Occupant_Weight":[68,20,22],
"Occupant_Age":[23,2.5,5.5],
"Occupied_Region":[],
"Occupant_Type_Region":[]
}
这是我尝试使用的代码:
DECLARE @test_data varchar(max)
SELECT @test_data = BulkColumn
FROM OPENROWSET (BULK 'C:\Users\ofiri\OneDrive\Desktop\אופיר\BWR\Data for testing\chevrolet_spark json files\03.03.2020 copy14', SINGLE_CLOB) import
insert into Person1([ID])
select [ID]
from openjson(@test_data,'$."Person_ID"')
with(
[ID] VARCHAR '$."Person_ID"'
)
cross apply
openjson (@test_data,'$."Occupant_Type"')
但是,在运行代码之后,表中的所有属性均为null
。
如何将值插入表格?
语法可能有所不同,并且取决于预期的结果。当然,目标表的结构也很重要。请注意,问题中的JSON有输入错误。正确的JSON是:
DECLARE @json nvarchar(max) = N'
{
"Person_ID":["7120","4816","6088"],
"Occupant_Type":["ADT","SCD","MCD"],
"Occupant_Gender":["M","F","M"],
"Occupant_Height":[180,102,127],
"Occupant_Weight":[68,20,22],
"Occupant_Age":[23,2.5,5.5],
"Occupied_Region":[],
"Occupant_Type_Region":[]
}'
您OPENSON()
通话中的错误是错误的路径-$.Person_ID
而不是$
。如果要分别解析每个嵌套的JSON数组,则应使用OPENJSON()
显式架构,正确的语句是:
SELECT [ID]
FROM OPENJSON (@json, '$.Person_ID') WITH ([ID] varchar(4) '$')
结果是:
ID
7120
4816
6088
但是,如果JSON拥有不同人的信息,则可能应使用OPENJSON()
默认模式和类似以下的语句:
SELECT
j1.[value] AS Person_ID,
j2.[value] AS Occupant_Type,
j3.[value] AS Occupant_Gender,
j4.[value] AS Occupant_Height,
j5.[value] AS Occupant_Weight,
j6.[value] AS Occupant_Age,
j7.[value] AS Occupied_Region,
j8.[value] AS Occupant_Type_Region
FROM OPENJSON(@json, '$."Person_ID"') j1
FULL JOIN OPENJSON(@json, '$."Occupant_Type"') j2 ON j1.[key] = j2.[key]
FULL JOIN OPENJSON(@json, '$."Occupant_Gender"') j3 ON j1.[key] = j3.[key]
FULL JOIN OPENJSON(@json, '$."Occupant_Height"') j4 ON j1.[key] = j4.[key]
FULL JOIN OPENJSON(@json, '$."Occupant_Weight"') j5 ON j1.[key] = j5.[key]
FULL JOIN OPENJSON(@json, '$."Occupant_Age"') j6 ON j1.[key] = j6.[key]
FULL JOIN OPENJSON(@json, '$."Occupied_Region"') j7 ON j1.[key] = j7.[key]
FULL JOIN OPENJSON(@json, '$."Occupant_Type_Region"') j8 ON j1.[key] = j8.[key]
结果:
Person_ID Occupant_Type Occupant_Gender Occupant_Height Occupant_Weight Occupant_Age Occupied_Region Occupant_Type_Region
7120 ADT M 180 68 23
4816 SCD F 102 20 2.5
6088 MCD M 127 22 5.5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句