不同的触发相同的工作?
Different triggers same job?
我有两个触发器,我想知道执行的结果是否相同。
CREATE TRIGGER trg_test_upd ON test AFTER UPDATE
AS
RAISERROR('Error', 16, 1);
ROLLBACK;
GO
CREATE TRIGGER trg_test_upd ON test INSTEAD OF UPDATE
AS
RAISERROR('Error', 16, 1);
GO
第二个问题,如果你有INSTEAD OF
为什么还要用ROLLBACK
?
这两个触发器的工作方式相同,只是第一个可能需要更多时间。
假设您的 test
table 有一个 table 有一百万条记录。并且您尝试为每条记录更新一些列。然后首先会发生更新操作,只有在所有记录的更新完成后,触发器才会被激活。然后,触发器将引发错误并使用 ROLLBACK
命令通过更新语句放弃所有更改。
在第二种情况下,一旦遇到 table 上的更新,触发器就会被激活。这将节省相当多的不必要的数据处理。要回答您的第二个问题,在使用 INSTEAD OF
时,在第二种情况下不会执行更新操作。因此,不需要 ROLLBACK
命令。
我有两个触发器,我想知道执行的结果是否相同。
CREATE TRIGGER trg_test_upd ON test AFTER UPDATE
AS
RAISERROR('Error', 16, 1);
ROLLBACK;
GO
CREATE TRIGGER trg_test_upd ON test INSTEAD OF UPDATE
AS
RAISERROR('Error', 16, 1);
GO
第二个问题,如果你有INSTEAD OF
为什么还要用ROLLBACK
?
这两个触发器的工作方式相同,只是第一个可能需要更多时间。
假设您的 test
table 有一个 table 有一百万条记录。并且您尝试为每条记录更新一些列。然后首先会发生更新操作,只有在所有记录的更新完成后,触发器才会被激活。然后,触发器将引发错误并使用 ROLLBACK
命令通过更新语句放弃所有更改。
在第二种情况下,一旦遇到 table 上的更新,触发器就会被激活。这将节省相当多的不必要的数据处理。要回答您的第二个问题,在使用 INSTEAD OF
时,在第二种情况下不会执行更新操作。因此,不需要 ROLLBACK
命令。