2017-02-24 4 views
3

一連のOPENJSONステートメントがあります。ストアドプロシージャの最後のステップで、2番目から最後のテーブルの最後の列からJSONを解析します。最後の列はほとんど常に空ですが、JSONオブジェクトからデータが移入されるため、時には情報があることがあります。私はここに示されているようFinalTableに表1に変換しようとしています:OPENJSON NULL(TSQL)を使用したクロス適用

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 

ここに私のコードです:にデータがないので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') 

、[調整]は、ほとんどの場合、[]が含まそのオブジェクトの元のJSONスクリプト。

私が最終列内のデータがないので、OPENJSONが何かを解析し、常には、基本的にはそれだけで言っている「影響を受ける0の行を」 を返していないように見えます

:「私はでないので、いや男は、ここではデータがありません

カラムが空の場合でもNULL値を保持するにはどうすればよいですか?

答えて

4

CROSSではなくOUTER APPLYを使用して問題を解決しました。