不同的触发相同的工作?

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 命令。