教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
精彩图库
  当前位置: 库库中文网 · 数据库类教程 · MSSQL教程 · Sql2000基础教程

关于事务回滚,rollback tran到底要不要写?

学院最新推荐文章
教程推荐
『关于事务回滚,rollback tran到底要不要写?』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2008-10-10 
关于事务回滚,有些不明白,不知道rollback tran在什么时候用。

begin tran

update 表1

update 表2

commit tran

这种写法,在更新表1或表2时出错,事务会不会自动回滚?

如果要加上rollback tran应该加在什么地方?每执行更新表后都用if @@error <>0 rollback tran做个判断吗?

这个问题第1个回答:
05用try..catch..
这个问题第2个回答:
SQL code



--我比较习惯加xact_abort选项



SET XACT_ABORT ON 



begin tran



update 表1



update 表2



commit tran 






这个问题第3个回答:
SQL code

BEGIN TRANSACTION

  BEGIN TRY

    sql_statement

    COMMIT

  END TRY

  BEGIN CATCH

     ROLLBACK TRANSACTION

  END CATCH


这个问题第4个回答:
2000的写法:

SQL code

begin tran 



update 表1 

if @@error<>0

begin

   rollback tran

   return

end



   



update 表2 

if @@error<>0

begin

   rollback tran

   return

end



commit tran 



这个问题第5个回答:
就看你的set XACT_ABORT 是on还是off了.

当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。

1.set XACT_ABORT off

set XACT_ABORT off

begin tran

update 表1

update 表2

commit tran

结论:如果第二个语句发生错误,那么整个事务将会忽略而提交。因此会造成你的数据的不一致的现象。因此这种情况需要对错误进行判断,如:if @@error <>0 rollback tran

2.set XACT_ABORT on

set XACT_ABORT on

begin tran

update 表1

update 表2

commit tran

结论:如果第二个语句发生错误,,那么整个事务将会自动的回滚。因此可以保证你的数据的一致性,因此不需要对错误进行判断。

这个问题第6个回答:
begin tran
  update 表1
  update 表2
if @@error=0
  commit tran
else
  rollback tran
这个问题第7个回答:
TO wufeng4552 :
begin tran
  update 表1
  update 表2
if @@error=0
  commit tran
else
  rollback tran

--------------
这种写法会不会不安全呢? 因为每次update之后都会改变@error的值 ,假如第一次update时出错了,那么这个时间@error的值非0,但第二次update时正确了,这个时候@error被改写为0,正好符合if @@error=0  commit tran 的条件,所以没有回滚。
这个问题第8个回答:
我刚做了一个测试,发现数据并没有回滚,不知道是什么问题

SET XACT_ABORT ON
begin tran

delete t1 where 产品编号='03'
if @@error <>0
begin
  rollback tran
  return
end

delete t22 where id='1'
if @@error <>0
begin
  rollback tran
  return
end

commit tran


说明:第二次delete时t22这个表是不存在的,既然表不存在,那么就会出错,这种错误事务会不会自动回滚呢? 测试结果是没有回滚,T1表中的03数据被删除。
这个问题第9个回答:
每执行更新表后都用
update
if @@error <>0
rollback tran
update
if @@error <>0
rollback tran

commit tran
做个判断
这个问题第10个回答:
谢谢各位
这个问题第11个回答:
declare @flag int
set @flag=0
begin tran

update 表1
if @@error <>03
  begin
      set @flag=1
      goto exe0
  end
update 表2
if @@error <>03
  begin
      set @flag=1
      goto exe0
  end
exe0:
if @flag=0
  Begin
      commit tran
  End
Else
  Begin
      rollback
  End

这个问题第12个回答:
上面写错了
declare @flag int
set @flag=0
begin tran

update 表1
if @@error <>0
  begin
      set @flag=1
      goto exe0
  end
update 表2
if @@error <>0
  begin
      set @flag=1
      goto exe0
  end
exe0:
if @flag=0
  Begin
      commit tran
  End
Else
  Begin
      rollback
  End

作者:bowlingl… 来源:C.S.D.N
】【关闭窗口
·上页:
·下页:
相关文章
     数据库类教程 - Sql2000基础教程
普通教程对SQL语句有一些认知,怎么样增涨
普通教程怎么样取每个学生地最好地3科成
普通教程在服务管理器  列表里面 找不到
普通教程SQL2000安装疑难
普通教程诚信散分
普通教程怎么样在创建视图时增加一个id列
普通教程sqlserver 分页取数据疑难 高手
普通教程请问学SQL server2000要看啥书?
普通教程MAX函数取最大日期地疑难~
普通教程老大些,我给分,救命啊!!!!!!!!
普通教程100分求一数据分类结构设计思路
普通教程我想将SQL DataBase Mail功能用
精彩图片汇集
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光