如何使用SQL Server JSON功能生成含IdRange数组的JSON输出?
解决方案
可以通过**构造JSON数组字符串+JSON_QUERY**实现需求,同时优化原查询的执行效率:
修改后的SQL语句
SELECT ( SELECT TOP 1 s.Reference, JSON_QUERY(CONCAT('[', p.FirstId, ',', p.LastId, ']')) AS IdRange FROM Site s CROSS APPLY ( SELECT MIN(ProjectId) AS FirstId, MAX(ProjectId) AS LastId FROM Project WHERE Siteid = s.SiteId ) p WHERE s.SiteId = 348 FOR JSON PATH, ROOT('seriesdata') ) AS JSONData
关键说明
- 效率优化:用
MIN(ProjectId)和MAX(ProjectId)替代两次独立的TOP 1子查询,仅需遍历一次Project表就能获取最小/最大ID,避免重复扫描数据。 - 生成JSON数组:
- 用
CONCAT拼接出[FirstId, LastId]格式的数组字符串 - 外层包裹
JSON_QUERY,让SQL Server识别这是合法的JSON内容,最终输出时不会被添加引号,直接渲染为JSON数组
- 用
- 结构保留:外层的
FOR JSON PATH, ROOT('seriesdata')保持不变,确保输出的JSON根节点和整体结构符合需求。
输出结果
JSONData {"seriesdata":[{"Reference":"SIT0003237","IdRange":[216,1263]}]}
内容的提问来源于stack exchange,提问作者arresteddevelopment
相关产品推荐
相关产品推荐

