FOR和AFTER触发器之间的区别?

时间:2011-03-17 14:44:35

标签: sql sql-server-2005 triggers

FOR和AFTER触发器之间有什么区别?

3 个答案:

答案 0 :(得分:130)

没有区别,他们做同样的事情。

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

相同
CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

INSTEAD OF触发器不同,并且在插入之前触发,而不是插入,可以在视图上使用,以便将适当的值插入到基础表中。

答案 1 :(得分:10)

@Ben绝对正确。

以下是MSDN文章Exploring SQL Server Triggers

文章中的一段:

  

在旧版本的SQL Server中也可以使用该语法。但是,现在SQL Server 2000中有两种类型的触发器,我更喜欢将FOR触发器称为AFTER触发器。因此,对于本文的其余部分,我将引用AFTER或INSTEAD OF触发器。

     

与之前看到的AFTER触发器类似,此触发器可防止对lastname字段进行更改。但是,它实现此业务规则的方式与前一个示例不同。由于INSTEAD OF触发器将触发UPDATE语句,因此INSTEAD OF触发器将评估业务规则测试是否通过。如果业务规则测试通过,则为了使更新发生,INSTEAD OF触发器必须再次显式调用UPDATE语句。

答案 2 :(得分:2)

AFTER指定只有在触发SQL语句中指定的所有操作都已成功执行时才会触发DML触发器。在此触发器触发之前,所有参考级联操作和约束检查也必须成功。 当FOR是唯一指定的关键字时,AFTER是默认值。

无法在视图上定义AFTER触发器。

INSTEAD OF 指定执行DML触发器而不是触发SQL语句,从而覆盖触发语句的操作。无法为DDL或登录触发器指定INSTEAD OF。

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql