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

sql*_*ild 111 sql triggers sql-server-2005

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

Ben*_*Ben 140

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

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
Run Code Online (Sandbox Code Playgroud)

是相同的

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
Run Code Online (Sandbox Code Playgroud)

一个INSTEAD OF触发是不同的,和火灾和前代替插入件,并且可以在视图中使用,以将相应的值到底层表.

  • 我喜欢使用触发器插入视图的注释.非常有用的信息.干杯. (11认同)

Waq*_*aja 12

@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语句.


小智 7

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

  • 这个短语“当 FOR 是唯一指定的关键字时,AFTER 是默认值”。很混乱。他们本来可以措辞更好。 (3认同)