0

当表 A 更改时,我有一个触发器将数据从表 A 复制到表 B

触发器是这样的:

ALTER TRIGGER ATrigger 
ON A AFTER INSERT, DELETE, UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    DELETE FROM B WHERE id IN (SELECT id FROM deleted)

    INSERT INTO B(Id, col1,col2) (SELECT i.Id, i.col1, i.col2 FROM inserted i)
END

但是我看到并不是所有插入A的数据都复制到B,复制的数据似乎很随机我四处寻找,发现可能是多插入引起的,有人建议使用cusor,但我认为应该是可以使用这两个 sql 从已插入、已删除的表中插入或删除。

请指教,谢谢!

4

1 回答 1

1

我不确定这是你的问题,但你的触发器有 2 个“陷阱”。首先在插入时,删除的表中没有行,因此不会进行删除。其次是相反的,可能是你的问题。在删除时,插入的表没有行。因此,所有 ID 都将从表 B 中删除,但不会重新插入。除此之外,如果 ID 不是表 A 的唯一键,那么当您插入它的第二个副本时,您将删除表 B 中的所有历史记录,并且只添加“新”历史记录。

如果您可以提供有关 2 个表的结构和触发器用途的更多信息,更不用说插入或未插入的行的任何模式(视情况而定),我们可以提供更多帮助。

于 2013-02-20T04:45:20.253 回答