日期:2014-05-18  浏览次数:20504 次

触发器后触发问题?
after触发器,为什么当触发器插入数据出错,(故意设置触发器语法插入另外表时不正确)却把所有之前的insert到表的数据也搞没了,不是后触发么,就算回滚,滚人家干嘛,死活想不明白!

------解决方案--------------------
这就像如果insert时违反了主键或约束时,数据也同样会同滚的道理一样.
如果表没有任务约束或触发器,插入成功就成功了,但如果有的话它们就是一个整体事务,就像这样
begin tran
insert into 表
select '11 '
触发器代码...

成功后commit tran
挫败rollback tran.

做为一个整体的事务是很有必要的,比如现在是在入库表上有触发器,触发器的代码是入库后库存增加,如果当更新库存时出错的话,入库的记录也保存到了,那何来的一致性呢?
------解决方案--------------------
AFTER

指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。

如果仅指定 FOR 关键字,则 AFTER 是默认设置。

不能在视图上定义 AFTER 触发器。