>source

이 JSON 객체를2 개의 부동 소수점 배열로 구성된SQL 데이터베이스 테이블에 어떻게 넣을 수 있을지 궁금합니다 :

{
    "Latitudes": [
    53.665084,
    53.665084,
    53.665184,
    53.665284
    ],
    "Longitudes":[
    17.342853,
    17.342953,
    17.343053,
    17.343153
    ]
}

표에는 CoordID, Latitude, 경도의 3 개 열이 있습니다 (CoordID는 자동 증분됩니다). 해당 테이블의 각 쌍 ([0], [0]/[1] [1] 등)을 테이블의 한 행으로 지정하고 싶습니다.이 개체를 사용하면 4 행이됩니다.

여기서 예상대로 작동하지 않는 코드는 다음과 같습니다. "Longitude"및 "Latitude"열 대신 null을 입력하고 ONE ROW 만 생성합니다 (4 행 대신).

declare @json NVARCHAR(MAX);
SET @json=
'{
    "Latitudes": [
    53.665084,
    53.665084,
    53.665184,
    53.665284
    ],
    "Longitudes":[
    17.342853,
    17.342953,
    17.343053,
    17.343153
    ]
}'
insert into dbo.Coords(
[Latitude],[Longitude])
select Latitude, Longitude from OPENJSON(@json)
WITH(
Latitude FLOAT '$."Latitudes"',
Longitude FLOAT '$."Longitudes"')

P.S OPENJSON () 함수는 SQL Server 2016 버전 또는 Azure SQL 데이터베이스에서 작동합니다. 누군가가 SSMS 2014에서 이것을 시도하려고하는 경우, 즉;-)


  • 답변 # 1

    OPENJSON() 만 사용하여 데이터를 검색 할 수 있습니다 . 여기서 중요한 부분은 OPENJSON() 가   JSON 를 파싱  정렬, 이 함수는이 배열의 요소 색인을 키로 반환하므로 이러한 색인에 대한 결과를 결합 할 수 있습니다.

    T-SQL :

    DECLARE @json NVARCHAR(MAX);
    SET @json=
    '{
        "Latitudes": [
        53.665084,
        53.665084,
        53.665184,
        53.665284
        ],
        "Longitudes": [
        17.342853,
        17.342953,
        17.343053,
        17.343153
        ]
    }'
    --INSERT INTO dbo.Coords([Latitude], [Longitude])
    SELECT j1.[value], j2.[value]
    FROM 
       OPENJSON(@json, '$.Latitudes') j1,
       OPENJSON(@json, '$.Longitudes') j2
    WHERE j1.[key] = j2.[key]
    
    

    출력 ( SELECT 의)  성명) :

    ---------------------
    value       value
    ---------------------
    53.665084   17.342853
    53.665084   17.342953
    53.665184   17.343053
    53.665284   17.343153
    
    

  • 답변 # 2

    JSON_QUERY 사용  배열을 파싱하려면 :

    declare @json NVARCHAR(MAX) =
    '{
        "Latitudes": [
        53.665084,
        53.665084,
        53.665184,
        53.665284
        ],
        "Longitudes":[
        17.342853,
        17.342953,
        17.343053,
        17.343153
        ]
    }';
    WITH cte1 AS (
      select A.value Latitude, [key] AS rn from OPENJSON(JSON_QUERY(@json,'$.Latitudes')) A
    ), cte2 AS (
      select A.value Longitude,[key] AS rn from OPENJSON(JSON_QUERY(@json,'$.Longitudes')) A
    )
    --insert into dbo.Coords([Latitude],[Longitude])
    SELECT Latitude, Longitude
    FROM cte1
    JOIN cte2
      ON cte1.rn = cte2.rn;
    
    

    db<>피들 데모

관련 자료

  • 이전 java - Scala Spark에서 CSV를 JSON으로 변환하여 RDD를 페어로 변환
  • 다음 c - disable_irq가 실제로 인터럽트를 마스크 할 수없는 것 같습니다