不同触发相同的工作?

时间:2015-05-29 07:53:53

标签: sql triggers ddl

我有两个触发器,我想知道所执行工作的结果是否相同。

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

1 个答案:

答案 0 :(得分:0)

这两个触发器以相同的方式工作,除了第一个触发器可能需要更多时间。

假设您的test表有一个包含一百万条记录的表。并且您尝试为每条记录更新一些列。然后首先进行更新操作,并且只有在完成所有记录的更新后,才会激活触发器。然后,触发器将引发错误并使用ROLLBACK命令通过update语句丢弃所有更改。

在第二种情况下,只要遇到表上的更新,就会激活触发器。这将节省相当多的不必要的数据处理。要回答第二个问题,在使用INSTEAD OF时,更新操作不会在第二种情况下执行。因此,不需要ROLLBACK命令。