数据回滚。在sql语句执行失败时,使用了此语句,可以将数据回滚到sql语句执行前的状态。
例如更新很多数据时,使用:
update ......
如果更新过程中出现错误,会导致数据混乱无法回复,
而使用了rollback:
if sql.code <  0 then 
rollback就可以使数据回滚

解决方案 »

  1.   

    事务回滚Transaction Rollback 是指当事务中的某一语句执行失败时将对数据库
    的操作恢复到事务执行前或某个指定位置.
    如:
    begin transaction my_transaction_delete
    use pangu
    go
    delete from department
    where dept_id = ’1012’
    update employee
    set dept_id = ’1001’
    where dept_id = ’1012’
    if @@error!=0 or @@rowcount=0 then
    begin
    rollback tran after_delete /* 回滚到保存点after_deletereturn,如果使用rollback my_transaction_delete 则会回滚到事务开始前 */
    commit tran
    print ‘更新员工信息表时产生错误’
    return
    end
    commit transaction my_transaction_delete
    go
      

  2.   

    ROLLBACK TRANSACTION 清除自事务的起点或到某个保存点所做的所有数据修改。ROLLBACK 还释放由事务控制的资源。
      

  3.   

    begin tran
      do something
    if @@error<>0 or @@rowcount
       begin
       rollback
       retrun
       end
    commit
      

  4.   

    如果在触发器中发出 ROLLBACK TRANSACTION: 1:将回滚对当前事务中的那一点所做的所有数据修改,包括触发器所做的修改。
    2:触发器继续执行 ROLLBACK 语句之后的所有其余语句。如果这些语句中的任意语句修改数据,则不回滚这些修改。执行其余的语句不会激发嵌套触发器。
    3:在批处理中,不执行所有位于激发触发器的语句之后的语句。
    例如:
    CREATE TRIGGER TestTrig ON TestTab FOR UPDATE AS
    SAVE TRANSACTION MyName
    INSERT INTO TestAudit
       SELECT * FROM inserted
    IF (@@error <> 0)
    BEGIN
      ROLLBACK TRANSACTION MyName (回到你那个保存点的操作.就是说它以后的操作都取消)
    END
      

  5.   

    如果在 COMMIT 之后执行 ROLLBACK TRANSACTION 语句,
    那么 ROLLBACK 将一直回滚到最外部的 BEGIN TRANSACTION。
    以下的触发器阐明了这一点:CREATE TRIGGER TestTrig ON TestTab FOR UPDATE AS
    BEGIN TRANSACTION
    INSERT INTO TrigTarget
       SELECT * FROM inserted
    COMMIT TRANSACTION
    ROLLBACK TRANSACTION
      

  6.   

    根据我的经验,我要补充的是
    1:当rollback在:if @@error<>0后执行时将回滚整个批处理语句.
    如果rollback不是在if @@error<>0后执行而是人为的执行时,只回滚rollback以前的语句,而在它后面的语句还会继续执行,因为在rollback之后将默认开始一个自动事务.
    2:在事务中指定的事务名没有实际的功能,只是方便我们去阅读程序.注意:如果指定了with 那么此事务名将作为存储在事务日志中的标记,如果需要在将来的日志恢复当中可以回滚到此事务标记点.
    3:一旦在事务中使用rollback,那么你无论是否指定事务名或指定哪个事务名,它都将会回滚到事务的开始处.而不能象commit那样与最近的begin transactin 匹配,组合成嵌套的事务.
      

  7.   

    首先谢谢大家的积极参与,但大家的回答大部分都可以在帮助中找到。我是希望各位能谈谈在实际应用中的一些经验和心得。比如:用rollback解决了哪些问题?或者使用rollback和不使用rollback对触发器有什么影响?