2017-02-24 6 views
3

일련의 OPENJSON 문이 있으며 저장 프로 시저의 마지막 단계에서 두 번째 테이블의 마지막 열에서 일부 JSON을 구문 분석합니다. 마지막 열은 거의 항상 비어 있지만 JSON 객체에서 채워 지므로 일부 정보가 가끔 있습니다. 에 데이터가 없기 때문에OPENJSON 교차 값 적용 (TSQL)

StageStep2에서
INSERT into FinalTable ([Col1], [Col2], [Col3], [Col4], [Col5], [Col6], [Col7], [AdjID], [Adj1], [Adj2], [Adj3] 
) 
SELECT [Col1], [Col2], [Col3], [Col4], [Col5], [Col6], [Col7], [AdjID], [Adj1], [Adj2], [Adj3] 

FROM StageStep2 cross apply 
OPENJSON (Adjustments) 
WITH (
     AdjID   nvarchar(200)  '$.id', 
     [Adj1]  nvarchar(200)  '$.adj1', 
     [Adj2]  nvarchar(200)  '$.adj2', 
     [Adj3]  nvarchar(200)  '$.adj3') 

, [조정]을 거의 항상 []이 포함되어 여기

Table 1 
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Adjustments 
123 592 593 data rand fake data [] 
345 035 021 ll need food now [ { "id": 999, "adj1": 123 }] 

FinalTable 
Col1 Col2 Col3 Col4 Col5 Col6 Col7 AdjID Adj1 Adj2 Adj3 
123 592 593 data rand fake data NULL NULL NULL NULL 
345 035 021 ll need food now 999 123 NULL NULL 

내 코드입니다 : 다음과 같이 나는 FinalTable에 표 1을 변환하려고 해당 객체에 대한 원본 JSON 스크립트.

내가 마지막 열에 데이터가 없기 때문에, OPENJSON 아무것도 구문 분석 항상은 기본적으로 그냥 말하는 '영향을받는 0 행을' 을 반환하지 않는 것을 나타납니다

: "나는이되지 않도록 아니의 친구는 여기에 데이터가 없습니다 구문 분석 "

열이 비어 있으면 NULL 값을 포함하도록하려면 어떻게해야합니까?

답변

4

CROSS 대신 OUTER APPLY를 사용하면 문제가 해결됩니다.