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

如何编写SQL更新触发器,触发时不使用INSERTED值仅同步指定分组数据

触发器修改方案

修正后SQL代码

CREATE TRIGGER [dbo].[TG_DATA_U] 
ON [dbo].[TABLE2]
FOR UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE t1
    SET PRICE = t2_group1.PRICE
    FROM TABLE1 t1
    -- 筛选本次更新操作涉及的ID,缩小处理范围
    INNER JOIN (SELECT DISTINCT ID FROM INSERTED) updated_ids
        ON t1.ID = updated_ids.ID
    -- 仅取对应ID下IDGROUP=1的价格作为更新值
    INNER JOIN TABLE2 t2_group1
        ON t2_group1.ID = t1.ID
        AND t2_group1.IDGROUP = 1
END

实现说明

  • 修复了原触发器的批量更新兼容问题:原写法中如果单次更新TABLE2多条记录,子查询返回多个值会触发SQL报错,改用JOIN关联的写法可支持批量更新场景
  • 严格遵循IDGROUP=1的取值规则:更新TABLE1时不再直接使用INSERTED表中的价格,而是主动查询TABLE2中对应ID下IDGROUP为1的有效价格,即使本次更新的是其他IDGROUP的记录,也不会影响TABLE1的取值逻辑
  • 性能优化:通过SELECT DISTINCT ID FROM INSERTED仅处理本次更新涉及的ID,避免全表扫描影响执行效率

如果对应ID不存在IDGROUP=1的记录,上述代码不会更新TABLE1中该ID的价格,若需要兼容该场景,可将INNER JOIN TABLE2 t2_group1改为LEFT JOIN,并配合ISNULL设置默认值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:18:03