You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:14:25