如何编写SQL查询生成包含两个不同对象的JSON数组?
纯SQL生成包含两个不同对象的JSON数组
方法1:对齐列后使用UNION ALL + FOR JSON PATH
这种方法通过补全两个查询的缺失列(用NULL填充),让它们的结构一致,再通过UNION ALL合并结果集,最后整体生成JSON数组。FOR JSON PATH会自动忽略值为NULL的属性,正好匹配你的需求:
SELECT 'setcontext' AS command, 'client' AS recordtype, 1030 AS recordid, NULL AS usercode UNION ALL SELECT 'gotodq' AS command, NULL AS recordtype, NULL AS recordid, 'react_webuser_debtor_details' AS usercode FOR JSON PATH
执行后直接生成目标JSON数组:
[ { "command": "setcontext", "recordtype": "client", "recordid": 1030 }, { "command": "gotodq", "usercode": "react_webuser_debtor_details" } ]
方法2:子查询生成独立JSON对象再合并
如果不想手动对齐列,可以通过子查询生成单个JSON对象,再用UNION ALL将它们作为行合并,最后通过JSON_QUERY避免转义并生成数组:
SELECT JSON_QUERY(json_item) FROM ( -- 生成第一个JSON对象 SELECT ( SELECT 'setcontext' AS command, 'client' AS recordtype, 1030 AS recordid FOR JSON PATH, WITHOUT_ARRAY_WRAPPER ) AS json_item UNION ALL -- 生成第二个JSON对象 SELECT ( SELECT 'gotodq' AS command, 'react_webuser_debtor_details' AS usercode FOR JSON PATH, WITHOUT_ARRAY_WRAPPER ) AS json_item ) AS combined FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
这个方法同样会直接输出你需要的JSON数组,无需额外字符串拼接操作。
内容的提问来源于stack exchange,提问作者Sammybar
相关产品推荐
相关产品推荐

