SQL Server 2016无查询结果时返回指定JSON的方法求助
解决SQL Server 2016查询无结果时返回指定JSON的问题
我完全懂你的痛点——当查询没有匹配记录时,FOR JSON AUTO只会返回空值,而你需要得到一个包含空字段的JSON数组。在SQL Server 2016里,我们可以通过判断查询结果是否存在,再结合UNION ALL补全行的方式实现需求,具体方案如下:
方法一:直接用EXISTS判断补全
这是最直接的写法,先执行原查询,若没有结果则返回一行空值:
SELECT Col1, Col2, Col3 FROM test WHERE Col1 = 2 UNION ALL -- 当原查询无结果时,返回一行空字段 SELECT '' AS Col1, '' AS Col2, '' AS Col3 WHERE NOT EXISTS (SELECT 1 FROM test WHERE Col1 = 2) FOR JSON AUTO, INCLUDE_NULL_VALUES
方法二:用CTE封装复杂查询(推荐)
如果你的原查询逻辑比较复杂(比如多表关联、聚合等),用CTE封装会让代码更清晰,避免重复写查询条件:
WITH QueryResults AS ( -- 这里放你的原查询逻辑 SELECT Col1, Col2, Col3 FROM test WHERE Col1 = 2 ) SELECT * FROM QueryResults UNION ALL -- 无结果时补全行 SELECT '' AS Col1, '' AS Col2, '' AS Col3 WHERE NOT EXISTS (SELECT * FROM QueryResults) FOR JSON AUTO, INCLUDE_NULL_VALUES
注意事项
- 如果你的字段是数值/日期类型,空字符串可能会引发类型不兼容问题,建议用
NULL代替,比如NULL AS Col1,INCLUDE_NULL_VALUES会把SQL的NULL转为JSON的null,更符合JSON规范。 - 这个方案完全兼容SQL Server 2016,不需要依赖更高版本的JSON专用函数(比如2022才推出的
JSON_ARRAY)。
内容的提问来源于stack exchange,提问作者Jagadeesh
相关产品推荐
相关产品推荐

