当表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从插入的,删除的表中插入或删除应该没问题。
请指教,谢谢!
答案 0 :(得分:1)
我不确定这是你的问题,但你的触发器有2个“陷阱”。首先在插入时,删除的表中没有行,因此不会进行删除操作。第二是相反的,可能是你的问题。在删除时,插入的表没有行。因此,所有ID都将从表B中删除,但不会重新插入。除此之外如果ID不是表A的唯一键,那么当您插入表的第二个副本时,您将删除表B中的所有历史记录并仅添加“新”历史记录。
如果您可以提供有关2个表的结构和触发器的目的的更多信息,更不用说插入或未插入的行上的任何模式,视情况而定,我们可以提供更多帮助。 / p>