OPENJSON交叉应用NULL值(TSQL)

时间:2017-02-24 01:04:58

标签: sql json tsql cross-apply

我有一系列OPENJSON语句,在我的存储过程的最后一步,我从倒数第二个表中的最后一列解析一些JSON。最后一列几乎总是空的,但它是从JSON对象填充的,因此它偶尔会有一些信息。我正在尝试将表1转换为FinalTable,如下所示:

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

这是我的代码:

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')

在StageStep2中,[Adjustments]几乎总是包含[],因为该对象的原始JSON脚本中没有数据。

看来因为我在最后一栏中没有数据,OPENJSON没有解析任何内容并且总是返回' 0行受影响' 基本上它只是说:" nah dude那里没有数据,所以我没有解析shib"

如果列为空,我该怎么做才能使它仍然包含NULL值?

1 个答案:

答案 0 :(得分:7)

使用OUTER APPLY代替CROSS APPLY解决了问题