2016-06-10 41 views
2

我在表A上创建了插入触发器,在表A中插入记录时,只要在表A上发生插入操作就行了。这很好,但是如果我在表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 
+1

为什么要删除早期版本?档案表通常会保留记录的所有版本。 –

+0

它不是像存档的表,但另一个表中包含表A的某些列的不同记录 – Sushil

+0

那么,你会让触发器删除旧行?这里有什么问题? –

回答

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 

使用生产之前请测试从目标表中删除。

+0

谢谢@Eralper ..完美的作品 – Sushil