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


Answers:


153

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

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

是相同的

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

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


14
我喜欢有关使用触发器插入视图的评论。非常有用的信息。干杯。
Mariusz

对不起,@ Ben先生,插入视图的场景是什么?谢谢^-^
Jeancarlo Fontalvo

@ JeancarloFontalvo,1)兼容性。如果视图保持不变,则基础表可以更改。2)访问控制,某些用户可能只有写某些列的权限。

17

@本绝对是正确的。

这是MSDN文章探索SQL Server触发器

文章中的一段:

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

就像您之前看到的AFTER触发器一样,此触发器可防止对姓氏字段进行更改。但是,它实现此业务规则的方式与前面的示例不同。因为将触发INSTEAD OF触发器代替UPDATE语句,所以INSTEAD OF触发器然后评估业务规则测试是否通过。如果业务规则测试通过,为了进行更新,INSTEAD OF触发器必须再次明确地调用UPDATE语句。


4

AFTER指定仅在触发SQL语句中指定的所有操作成功执行后才触发DML触发器。在触发此触发器之前,所有引用级联操作和约束检查也必须成功。当FOR是指定的唯一关键字时,AFTER是默认设置。

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

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

https://docs.microsoft.com/zh-cn/sql/t-sql/statements/create-trigger-transact-sql


1
该措辞为“当指定唯一关键字FOR时,默认为AFTER”。非常令人困惑。他们本来可以说得更好。
FMFF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.