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放到了最後,那麼當中間任何一步出錯的時候都會回滾以上所有操作的
把每個操作都分別放到一個事務中就行了