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

如何将Rules表的JSON数据合并到Template表的Rules数组中?

解决方案

要实现把Rules表的RuleJson合并到Template表的Rules数组里,直接用单次JSON_MODIFY配合聚合查询就能搞定,不用循环逐个添加。具体步骤如下:

  1. 聚合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"}]
    
  2. 更新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行
    
  3. 验证结果
    查询更新后的Template表:

    SELECT TemplateValue FROM Template WHERE Id = 1;
    

    就能得到你预期的JSON结构。

为什么之前用JSON_MODIFY没成功?

大概率是因为你尝试逐个添加元素时没处理好JSON类型的识别,或者没有先把所有RuleJson聚合成完整数组再替换。直接替换整个数组节点比循环添加效率更高,也不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:31:01