OPENJSON 与 NULL 值交叉应用 (SQL)
Posted
技术标签:
【中文标题】OPENJSON 与 NULL 值交叉应用 (SQL)【英文标题】:OPENJSON cross apply with NULL values (TSQL) 【发布时间】:2017-02-24 01:04:57 【问题描述】:我有一系列 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 行受影响' 基本上它只是在说:“不,伙计,这里没有数据所以我没有解析 shib"
如果该列为空,我该怎么做才能使它仍然包含 NULL 值?
【问题讨论】:
【参考方案1】:使用 OUTER APPLY 而不是 CROSS APPLY 解决了这个问题
【讨论】:
以上是关于OPENJSON 与 NULL 值交叉应用 (SQL)的主要内容,如果未能解决你的问题,请参考以下文章