SQL如何将选中ConfigKey的JSON值以ConfigKey为节点合并输出
实现方案
你之前使用JSON_MODIFY失败的核心原因是没有用JSON_QUERY包裹JSON格式的ConfigValue,导致JSON_MODIFY默认把内容识别为普通字符串进行转义,无法输出嵌套的JSON结构。
以下是兼容SQL Server 2016及以上版本的通用实现,假设你的表名为ConfigTable,可替换为实际表名:
DECLARE @MergedJson NVARCHAR(MAX) = '{}' SELECT @MergedJson = JSON_MODIFY( @MergedJson, CONCAT('$."', ConfigKey, '"'), -- 动态拼接JSON路径,加引号兼容带特殊字符的ConfigKey JSON_QUERY(ConfigValue) -- 标记内容为JSON对象,避免被转义 ) FROM ConfigTable WHERE ConfigKey IN ('employee', 'manager') -- 此处修改为你要选中的ConfigKey列表 SELECT @MergedJson AS FinalJson
效果验证
- 当
WHERE条件为ConfigKey IN ('employee', 'manager')时,输出和你给出的示例1完全一致 - 当
WHERE条件为ConfigKey = 'employee'时,输出和你给出的示例2完全一致
其他可选方案(SQL Server 2017及以上)
如果使用的是SQL Server 2017及更高版本,也可以用FOR JSON语法实现,写法更简洁:
SELECT JSON_QUERY(ConfigValue) AS [employee] FROM ConfigTable WHERE ConfigKey = 'employee' FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
该写法适合选中的ConfigKey数量固定的场景,动态选中多个Key时优先使用第一种方案。
内容的提问来源于stack exchange,提问作者techresearch
相关产品推荐
相关产品推荐

