如何将Rules表的JSON数据合并到Template表的Rules数组中?
解决方案
要实现把Rules表的RuleJson合并到Template表的Rules数组里,直接用单次JSON_MODIFY配合聚合查询就能搞定,不用循环逐个添加。具体步骤如下:
聚合Rules表的JSON数据为数组
先把Rules表中所有的RuleJson行拼接成一个合法的JSON数组,用STRING_AGG函数拼接后包裹数组方括号:SELECT CONCAT('[', STRING_AGG(RuleJson, ','), ']') AS CombinedRules FROM Rules这个查询会输出标准的JSON数组:
[{"RuleName":"a","expression":"1=1"},{"RuleName":"b","expression":"1=1"}]更新Template表的JSON字段
用JSON_MODIFY替换Template表中TemplateValue的$.Rules节点,注意用JSON_QUERY包裹聚合后的数组,避免SQL Server把它转义成字符串类型:UPDATE t SET t.TemplateValue = JSON_MODIFY(t.TemplateValue, '$.Rules', JSON_QUERY(r.CombinedRules)) FROM Template t CROSS JOIN ( SELECT CONCAT('[', STRING_AGG(RuleJson, ','), ']') AS CombinedRules FROM Rules ) r WHERE t.Id = 1; -- 根据实际需求调整过滤条件,比如批量更新所有Template行验证结果
查询更新后的Template表:SELECT TemplateValue FROM Template WHERE Id = 1;就能得到你预期的JSON结构。
为什么之前用JSON_MODIFY没成功?
大概率是因为你尝试逐个添加元素时没处理好JSON类型的识别,或者没有先把所有RuleJson聚合成完整数组再替换。直接替换整个数组节点比循环添加效率更高,也不容易出错。
内容的提问来源于stack exchange,提问作者techresearch
相关产品推荐
相关产品推荐

