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

如何让SQL Server的FOR JSON PATH在无数据时返回空JSON数组?

解决SQL Server中FOR JSON PATH无数据时返回空而非[]的问题

问题描述

在Azure SQL(版本:Microsoft SQL Azure (RTM) - 12.0.2000.8)中,使用FOR JSON PATH生成JSON对象列表时,当目标表无数据,查询返回空结果(NULL),但期望返回标准空数组格式[]。

最优解决方案

使用ISNULL函数直接包裹原FOR JSON PATH查询,将无数据时的NULL结果替换为'[]',写法简洁且符合SQL原生特性:

SELECT ISNULL(
    (
        SELECT [mytable].[field_a] AS [a], [mytable].[field_b] AS [b]
        FROM [mytable]
        FOR JSON PATH, INCLUDE_NULL_VALUES
    ), '[]'
) AS jsonResult

原理说明

  • 当表中有数据时,内部的FOR JSON PATH查询会正常返回包含对象的JSON数组字符串,ISNULL不会触发替换,直接返回该数组。
  • 当表中无数据时,内部查询返回NULL,ISNULL会将其替换为预定义的空数组字符串'[]',完全匹配预期结果。

对比临时方案

你之前用CONCAT手动拼接数组括号的方案虽然可行,但存在明显缺陷:

  • 需要额外的字符串拼接操作,写法冗余且不够直观。
  • 若后续修改JSON结构,手动拼接的部分容易遗漏或出错,维护成本更高。

而ISNULL方案完全依托SQL Server的JSON函数特性,逻辑清晰,代码更易维护。


内容的提问来源于stack exchange,提问作者Ceci Semble Absurde.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:06:24