首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL事物回滚有关问题,大家帮小弟看看

2012-02-28 
SQL事物回滚问题,大家帮小弟看看CREATEPROCEDUREDBO.xxxassetnocountoffBEGINTRANSACTIONupdateeit_Classs

SQL事物回滚问题,大家帮小弟看看
CREATE   PROCEDURE   DBO.xxx
as
set   nocount   off
BEGIN   TRANSACTION    
update   eit_Class   set   orders=520   where   id=1
if   @@error   <>   0
begin
        --raiserror( '抱歉,更新时发生错误,更新失败! '16,1)
        ROLLBACK             /*回滚,取消修改*/
        return
end
insert   into   eit_Class(orders)     values( 'a ')    
if   @@error   <>   0
begin
        --raiserror( '抱歉,更新时发生错误,更新失败! '16,1)
        ROLLBACK             /*回滚,取消修改*/
        return
end
if   exists(select   1   from   eit_Class   where   id=1)
begin
        update   eit_Class     set   orders=111   where     id=1
        if   @@error   <>   0
        begin
                --raiserror( '抱歉,更新时发生错误,更新失败! '16,1)
                ROLLBACK             /*回滚,取消修改*/
                return
        end
end
else
begin
        insert   into   eit_Class(orders)     values(111)    
        if   @@error   <>   0
        begin
              --   raiserror( '抱歉,插入时发生错误,更新失败! '16,1)
                ROLLBACK             /*回滚,取消修改*/
                return
        end
end
COMMIT   TRANSACTION         /*提交事务,保持修改*/
GO


update   eit_Class   set   orders=520   where   id=1

以上这句没错   为什么不会写入库中?   我不要全部回滚


[解决办法]
你整個存儲過程中只有一對begin tran和commit tran,並且把commit放到了最後,那麼當中間任何一步出錯的時候都會回滾以上所有操作的

把每個操作都分別放到一個事務中就行了

热点排行