如何让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.
相关产品推荐
相关产品推荐

