【发布时间】:2022-03-12 18:33:35
【问题描述】:
如果从子查询(或左连接)中选择的值为空,我如何返回返回 NULL(或根本没有属性)的 JSON_QUERY?
这是一个简单的例子(想象下面的 NULL 是一个子查询):
SELECT
JSON_QUERY((SELECT NULL as SomeColumn
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)) AS Test
这会返回空 JSON 对象——这不是我想要的:
Test
----------------
{}
由于子查询返回 NULL,如果子查询返回 NULL,我希望它返回 NULL,否则它应该返回 JSON。
即
当子查询返回 NULL 时,JSON 结果应该是:
Test
----------------
NULL
当子查询返回 JSON 时,JSON 结果应该是:
Test
----------------
{ someColumn: 'some json' ... }
如何使用 JSON 查询执行此操作?
[编辑]
我试过这个,以为我可以做一个 CASE 语句:
SELECT
JSON_QUERY((SELECT JSON_VALUE('{"SomeColumn":"Test"}', '$') AS SomeColumn
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)) AS Test
但这不会选择根。以上返回:
Test
------
{}
用例
我追求的用例是这样的。
当我返回一个 JSON 查询时,我希望能够在地址存在时返回类似的内容:
{
name: 'John',
address: {
line1: '123 elm st'
}
}
或者如果没有地址记录,我希望它返回:
{
name: 'John',
address: NULL
}
或
{
name: 'John'
}
我不希望它返回
{
name: 'John',
address: {}
}
【问题讨论】:
标签: sql json sql-server