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

SQL Server触发器Update多行操作归档到TableB的实现问题

触发器UPDATE分支实现方案

UPDATE操作触发时,DELETED临时表存储所有行更新前的旧值,INSERTED临时表存储所有行更新后的新值,两者通过TableA的主键key关联即可实现多行数据的对应归档,无需使用游标,具体代码如下:

else if (@wAction = 'U') 
begin
    insert into TableB (oldkey, oldfield, newkey, newfield)
    select d.key, d.field, i.key, i.field
    from DELETED d
    INNER JOIN INSERTED i ON d.key = i.key
end

优化建议

  • 所有插入TableB的语句都建议显式指定列名,避免后续表结构调整(比如新增字段、调整字段顺序)时触发器报错,你现有的INSERT、DELETE分支也可以同步修改:
    -- INSERT分支调整后
    insert into TableB (oldkey, oldfield, newkey, newfield)
    select null, null, key, field 
    from inserted;
    
    -- DELETE分支调整后
    insert into TableB (oldkey, oldfield, newkey, newfield)
    select key, field, null, null 
    from deleted;
    
  • 如果你业务中存在修改TableA主键key的场景,上述关联逻辑会失效,这种情况建议新增一个不会被修改的行唯一标识字段作为关联键,或者直接改用DML语句的OUTPUT子句实现归档逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 02:45:03