首页 新闻 会员 周边

关于触发器中的回滚问题

0
悬赏园豆:20 [待解决问题]

在官方文档http://technet.microsoft.com/zh-cn/library/ms181299.aspx中“互操作性”段落中有这么一句:

  • 触发器继续执行 ROLLBACK 语句之后的所有其余语句。 如果这些语句中的任意语句修改数据,则不回滚这些修改。 执行其余的语句不会激发嵌套触发器。

其中“执行其余的语句不会激发嵌套触发器”,是否意味着在回滚操作后面的语句如果继续执行的话,后面语句触发的触发器就不会执行了。比如后面的语句有针对一个表的update操作,而这张表又有update的触发器,这个时候update会执行成功,但触发器不会执行?

心中无言的主页 心中无言 | 初学一级 | 园豆:154
提问于:2013-11-06 17:15
< >
分享
所有回答(1)
0

这个问题应该是可以通过实践得出的,你只要自己测试一下就知道了。

别人回答的是别人的经验。

你自己测试过的就记忆深刻了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2013-11-07 10:25

测试后是会触发嵌套的触发器,所以比较纳闷。

以下是测试代码:

 

--drop table t1
--drop table t2

create table t1(id int)
create table t2(id int)

insert into t2
values(100)
go

create trigger dbo.trigger_t1
on t1
for insert
as

rollback;

select '这是rollback之后的语句,这里能执行'

update t2
set id = 1;
go

 

create trigger dbo.trigger_t2
on t2
for update
as

select '这是t2的update触发器,这里能执行'

go


--插入数据
insert into t1
values(1)
/*
这是rollback之后的语句,这里能执行

这是t2的update触发器,这里能执行

消息 3609,级别 16,状态 1,第 3 行
事务在触发器中结束。批处理已中止。
*/

--没有记录
select * from t1


select * from t2
/*
id
1
*/

支持(0) 反对(0) 心中无言 | 园豆:154 (初学一级) | 2013-11-07 13:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册