在SQL中我们可以用begin transaction开始一个事件,用commit提交,用Rollback来回滚事务.
但假设我在一个存储过程中有如下三句语句
update A
update B
delect C问题1:我是否要在每个update或delete语句后面加上一个判断当前执行是否正常的操作,然后再去commit呢?
问题2:判断当前执行是否成功的语句是什么呢?
问题3: 如果我只在存储过程的最前面加上begin transaction,在最后面加上commit,那么当update B这句出错后,系统是否会整个事务回滚,还是只是回滚update B这个操作呢?
谢谢!

解决方案 »

  1.   

    1.不用
    2.if @@error <> 0
        return -1
      

  2.   


    BEGIN TRAN
    DECLARE @s int
    Set @s=0

    update A
    Set @s=@s+@@error

    update B
    Set @s=@s+@@error

    delect C
    Set @s=@s+@@error IF @s=0 
    commit tran
    Else
    rollback tran
      

  3.   

    1.在每个update或delete语句后面加上一个判断当前执行是否正常的操作
    2.@@error<>0
    3.整个回滚
      

  4.   

    BEGIN TRAN
        DECLARE @s int
        Set @s=0
        
        update A
        Set @s=@s+@@error
        
        update B
        Set @s=@s+@@error
        
        delect C
        Set @s=@s+@@error    IF @s=0 
            commit tran
        Else
            rollback tran
      

  5.   

    问题1:我是否要在每个update或delete语句后面加上一个判断当前执行是否正常的操作,然后再去commit呢?
    碰到严重错误,执行会中断而退出,事务不会被提交 
    问题2:判断当前执行是否成功的语句是什么呢?
     执行完语句后,公用变量@@errorno=0表示无错
    问题3: 如果我只在存储过程的最前面加上begin transaction,在最后面加上commit,那么当update B这句出错后,系统是
    否会整个事务回滚,还是只是回滚update B这个操作呢? 
    事务一回滚就整个回滚。