FOR
和AFTER
触发器有什么区别?
FOR
和AFTER
触发器有什么区别?
没有区别,它们做的是同样的事情。
CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
等同于
CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
一个 INSTEAD OF
触发器不同于其他触发器,它在插入之前而且代替插入时触发,并且可以用于视图上,以便将适当的值插入到基础表中。
@Ben 是完全正确的。
这里有一篇微软的 MSDN 文章 探索 SQL Server 触发器
摘自文章的一个段落:
这种语法在早期版本的 SQL Server 中也是可以接受的。但是,现在 SQL Server 2000 中有两种类型的触发器,我更喜欢将 FOR 触发器称为 AFTER 触发器。因此,在本文余下部分中,我将提到 AFTER 或 INSTEAD OF 触发器。
与之前看到的 AFTER 触发器类似,这个触发器防止对 lastname 字段进行更改。但是,它实现了比前一个示例不同的业务规则。由于 INSTEAD OF 触发器代替 UPDATE 语句执行,因此 INSTEAD OF 触发器随后评估业务规则测试是否通过。如果业务规则测试通过,则 INSTEAD OF 触发器必须明确再次调用 UPDATE 语句才能进行更新。
AFTER指定DML触发器仅在触发SQL语句中指定的所有操作成功执行后才会被触发。在触发此触发器之前,所有参照级联操作和约束检查也必须成功。
当只有FOR关键字被指定时,AFTER是默认选项。
不能在视图上定义AFTER触发器。
INSTEAD OF指定DML触发器在触发SQL语句之前执行,因此覆盖了触发语句的操作。不能为DDL或logon触发器指定INSTEAD OF。
https://learn.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql