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触发器不同,它在插入之前触发,而不是在插入之前触发,并且可以在视图上使用,以便将适当的值插入到底层表中。
INSTEAD OF
@ Ben 完全正确。
这是 MSDN 文章 探索 SQLServer 触发器
文章中的一段:
这种语法在 SQLServer 的旧版本中也是可以接受的。但是,既然 SQLServer2000中有两种类型的触发器 我更喜欢将 FOR 触发器称为 AFTER 触发器。因此,对于本文的其余部分,我将引用 AFTER 或 INSTEADOF 触发器。 与前面看到的 AFTER 触发器一样,该触发器防止对 lastname 字段进行更改。但是,它实现此业务规则的方式与前面的示例不同。由于 INSTEADOF 触发器触发 UPDATE 语句,因此 INSTEADOF 触发器将评估业务规则测试是否通过。如果业务规则测试通过,为了发生更新,INSTEADOF 触发器必须再次显式调用 UPDATE 语句。
这种语法在 SQLServer 的旧版本中也是可以接受的。但是,既然 SQLServer2000中有两种类型的触发器 我更喜欢将 FOR 触发器称为 AFTER 触发器。因此,对于本文的其余部分,我将引用 AFTER 或 INSTEADOF 触发器。
与前面看到的 AFTER 触发器一样,该触发器防止对 lastname 字段进行更改。但是,它实现此业务规则的方式与前面的示例不同。由于 INSTEADOF 触发器触发 UPDATE 语句,因此 INSTEADOF 触发器将评估业务规则测试是否通过。如果业务规则测试通过,为了发生更新,INSTEADOF 触发器必须再次显式调用 UPDATE 语句。
AFTER 指定只有在触发 SQL 语句中指定的所有操作都已成功执行时才触发 DML 触发器。在触发器触发之前,所有引用级联操作和约束检查也必须成功。 当 FOR 是唯一指定的关键字时,AFTER 是默认值。
不能在视图上定义 AFTER 触发器。
而不是 指定执行 DML 触发器而不是触发 SQL 语句,因此将重写触发语句的操作。不能为 DDL 或登录触发器指定 INSTEADOF。
Https://learn.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql