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

SQL Server如何将GROUP BY分组值作为JSON键生成自定义JSON

实现方法

SQL Server 原生FOR JSON语法不支持直接将查询返回的字段值作为动态JSON键名,你需要先按schema分组聚合出每个schema对应的依赖对象数组,再二次拼接成键为schema名的JSON对象。
另外你给出的期望输出存在JSON语法错误:键值对结构的外层必须用{}(JSON对象)包裹,不能用[](JSON数组,仅支持数字索引),修正后可生成完全符合预期的合法JSON。

可直接运行的代码

-- 先按schema分组聚合每个schema下的依赖对象
WITH schema_dependency AS (
  SELECT
    referencing_schema_name,
    -- 构造每个schema对应的对象数组,保留转义逻辑避免特殊字符导致JSON无效
    object_list = JSON_QUERY('["' + STRING_AGG(STRING_ESCAPE(referencing_entity_name, 'json'), '","') + '"]')
  FROM sys.dm_sql_referencing_entities('dbo.C_Table', 'OBJECT') re
  GROUP BY referencing_schema_name
)
-- 二次拼接为schema名作为键的JSON对象
SELECT CONCAT(
  '{',
  STRING_AGG(
    CONCAT('"', STRING_ESCAPE(referencing_schema_name, 'json'), '":', object_list),
    ','
  ),
  '}'
) AS table_dependency_map
FROM schema_dependency
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

输出结果

运行后返回的合法JSON结构如下,完全符合你要的简洁结构:

{
  "dbo": [
    "C_Table"
  ],
  "bcd": [
    "get_AmazingDataById",
    "get_EvenMoreAmazingDataById"
  ]
}
关于STRING_AGG方案的补充说明
  • 在SQL Server 2017、Azure SQL及以上版本中,STRING_AGG是实现这类字符串聚合性能最优、写法最简洁的原生方案,不需要使用老旧的FOR XML PATH拼接方式(该方式性能更差,还需要额外处理XML特殊字符转义)。
  • 你原有写法中用STRING_ESCAPE处理对象名的JSON转义是非常规范的写法,可以避免对象名包含引号、换行符等特殊字符时生成非法JSON,建议保留。

内容的提问来源于stack exchange,提问作者Dalton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:48:23