我有两个触发器,我想知道所执行工作的结果是否相同。
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
第二个问题,如果你有ROLLBACK
,为什么要使用INSTEAD OF
?
答案 0 :(得分:0)
这两个触发器以相同的方式工作,除了第一个触发器可能需要更多时间。
假设您的test
表有一个包含一百万条记录的表。并且您尝试为每条记录更新一些列。然后首先进行更新操作,并且只有在完成所有记录的更新后,才会激活触发器。然后,触发器将引发错误并使用ROLLBACK
命令通过update语句丢弃所有更改。
在第二种情况下,只要遇到表上的更新,就会激活触发器。这将节省相当多的不必要的数据处理。要回答第二个问题,在使用INSTEAD OF
时,更新操作不会在第二种情况下执行。因此,不需要ROLLBACK
命令。