FOR和AFTER触发器之间有什么区别?
答案 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