FOR和AFTER触发器之间的区别?
Posted
技术标签:
【中文标题】FOR和AFTER触发器之间的区别?【英文标题】:Difference between FOR and AFTER triggers? 【发布时间】:2011-07-17 11:21:02 【问题描述】:FOR
和 AFTER
触发器有什么区别?
【问题讨论】:
+1:我阅读了关于触发器的 SQL Server 联机丛书文章,最后得到了完全相同的问题 我发现这篇文章很有用:dotnettricks.com/learn/sqlserver/… 【参考方案1】:没有区别,他们做同样的事情。
CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
是一样的
CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
INSTEAD OF
触发器不同,它在插入之前而不是在插入之前触发,并且可以在视图上使用,以便将适当的值插入到基础表中。
【讨论】:
我喜欢关于使用触发器插入视图的评论。非常有用的信息。干杯。 请问@Ben 先生,插入 视图的场景是什么?谢谢^-^ @JeancarloFontalvo,1) 兼容性。如果视图保持不变,基础表可以更改。 2) 访问控制,某些用户可能只有对某些列的写入权限。【参考方案2】:@Ben 完全正确。
这里是 MSDN 文章Exploring SQL Server Triggers
文章中的一段:
该语法在旧版本的 SQL Server 中也可以接受。但是,既然 SQL Server 2000 中有两种类型的触发器,我更愿意将 FOR 触发器称为 AFTER 触发器。因此,对于本文的其余部分,我将提及 AFTER 或 INSTEAD OF 触发器。
与您之前看到的 AFTER 触发器一样,此触发器可防止对姓氏字段进行更改。但是,它实现此业务规则的方式与前面的示例不同。因为 INSTEAD OF 触发器代替 UPDATE 语句触发,所以 INSTEAD OF 触发器然后评估业务规则测试是否通过。如果业务规则测试通过,为了进行更新,INSTEAD OF 触发器必须再次显式调用 UPDATE 语句。
【讨论】:
【参考方案3】:AFTER 指定仅当触发 SQL 语句中指定的所有操作都已成功执行时才触发 DML 触发器。在触发此触发器之前,所有引用级联操作和约束检查也必须成功。 当 FOR 是唯一指定的关键字时,AFTER 是默认值。
AFTER 触发器不能在视图上定义。
代替 指定执行 DML 触发器而不是触发 SQL 语句,因此覆盖触发语句的操作。不能为 DDL 或登录触发器指定 INSTEAD OF。
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql
【讨论】:
这句话“当 FOR 是唯一指定的关键字时,AFTER 是默认值。”很混乱。他们本可以措辞更好。以上是关于FOR和AFTER触发器之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章