更新触发器如何删除旧记录

Posted

技术标签:

【中文标题】更新触发器如何删除旧记录【英文标题】:Update Trigger how to delete old record 【发布时间】:2016-06-10 11:30:41 【问题描述】:

我在表 A 上创建了插入触发器,每当表 A 上发生插入时,它就会在表 B 中插入记录。这工作正常,但是如果我在表 A 上使用更新触发器,它会在表 B 中插入更新的记录,但不会删除旧的记录从表 B 中记录。如何达到预期的结果?

ALTER TRIGGER trigger1 on tableA
FOR UPDATE

AS 
BEGIN

IF NOT EXISTS (SELECT C.column1 FROM  tableB C INNER JOIN INSERTED I ON C.column1 = I.column1 WHERE  C.column1 = I.column1 AND C.column2 = I.column2 )
 INSERT INTO tableB ( column1 , column2 )
    SELECT column1 , column2 
    FROM INSERTED I
    WHERE RecordTypeId IS NOT NULL
    GROUP BY column1 , column2 
    ORDER BY column1 , column2 

END

【问题讨论】:

为什么要删除早期版本?存档表通常会保留记录的所有版本。 它不像归档表,而是另一个表,其中包含与表 A 的某些列不同的记录 好吧,你会让触发器删除旧行吗?这里有什么问题? 编辑您的问题并显示当前版本的触发器。只需要先检查该行是否存在,然后再删除即可。 阅读很少关于在触发器中插入和删除的内容。如何识别插入和删除,然后相应地构建您的脚本。 【参考方案1】:

请检查以下SQL Server Update trigger 使用内部已删除表从目标表中删除

create TRIGGER trigger1 on tableA
FOR UPDATE

AS 
BEGIN

 DELETE tableB
 FROM tableB b
 INNER JOIN deleted d
    on b.column1 = d.column1
    and b.column2 = d.column2 


 INSERT INTO tableB ( column1 , column2 )
    SELECT column1 , column2 
    FROM INSERTED

请在使用生产前进行测试。

【讨论】:

感谢@Eralper .. 完美运行

以上是关于更新触发器如何删除旧记录的主要内容,如果未能解决你的问题,请参考以下文章

特殊存储过程——触发器Trigger

如何分离在 Oracle 中为特定表插入、更新和删除记录的过程

SQL Server - 使用表触发器记录表插入,更新,删除行数

如何删除旧的 git 历史记录?

设计一种审计表更改的方法

如何删除 Ubuntu 上不再使用的旧内核