【发布时间】:2020-04-09 15:22:58
【问题描述】:
我在 ORACLE 中有以下查询:
SELECT *
FROM "Supplier" s
OUTER APPLY(
SELECT JSON_ARRAYAGG(JSON_OBJECT(p."Id", p."Description", p."Price")) as "Products"
FROM "Products" p
WHERE p."SupplierId" = s."Id"
) sp
在OUTER APPLY 子查询中,我从我需要的列创建 json,然后将这些对象聚合到 json 数组中。我需要这两个功能,因为有时我只使用其中一个。我想在 SqlServer 中执行相同的操作。这是我目前管理的解决方案:
SELECT *
FROM "Supplier" as s
OUTER APPLY(
SELECT p."Id", p."Description", p."Price"
FROM "Products" as p
WHERE p."SupplierId" = s."Id"
FOR JSON PATH
) as sp("Products")
问题是 SqlServer 同时执行这两个函数(这是FOR JSON PATH 语句的目的)。所以这是我的问题:
1) 是否可以创建 json 对象而不将其包装到数组中(类似 oracle 的语法)?
2) 是否可以将 json 对象聚合成一个数组?
更新 我正在使用 SqlServer 版本 2019 15.0.2000.5
预期结果(json格式的产品单条记录)
"Products":{
"Id":"FEB0646B709B45B5A306E10599716F28",
"Description":"Database Manager",
"Price":149.99
}
【问题讨论】:
标签: json sql-server