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] 삭제
몇 마디 만하겠습니다