• 触发器中回滚中需要注意的地方


    • 在官方文档http://technet.microsoft.com/zh-cn/library/ms181299.aspx中“互操作性”段落中有这么一句:
    • 触发器继续执行 ROLLBACK 语句之后的所有其余语句。 如果这些语句中的任意语句修改数据,则不回滚这些修改。 执行其余的语句不会激发嵌套触发器。

    其中“执行其余的语句不会激发嵌套触发器”,是否意味着在回滚操作后面的语句如果继续执行的话,后面语句触发的触发器就不会执行了?

    比如后面的语句有针对一个表的update操作,而这张表又有update的触发器,这个时候update会执行成功,但触发器不会执行?

      以下是网友帮忙写的测试用例,结果是触发了嵌套事务,此实验结果经过亲自验证:

      

    --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
    */
  • 相关阅读:
    CodeForces 55D Beautiful numbers(数位dp+数学)
    hdu 2089 不要62(数位dp入门)
    Git版本控制
    Git初始化-添加提交以及查看状态
    linux-高并发与负载均衡-lvs-3种模型推导
    Scrapy中选择器的用法
    Scrapy命令行详解
    Scrapy框架基本用法讲解
    MaxCompute教程
    Scrapy安装报错
  • 原文地址:https://www.cnblogs.com/ranran/p/rollback.html
Copyright © 2020-2023  润新知