存储过程事务的问题!

tiky_6228769 2006-06-22 10:56:28
查了联机丛书上有这么一个选项XACT_ABORT,当然你设置为ON时,当某个操作错误,整个事务自动回滚

我一般没这样做,都是对每个DML进行@@ERROR检测,如果错误,ROLLBACK TRAN,我想请教的是什么情况下,用这个XACT_ABORT,因为我的做法也可以啊,是不是我哪里理解没透彻,请老鸟指教!!!!
...全文
169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
OracleRoob 2006-06-25
  • 打赏
  • 举报
回复
如果需要保证数据处理的一致性,在事务开始前,都要加Set Xact_abort on。

SET XACT_ABORT ON
BEGIN TRAN
...
...
COMMIT TRAN

这样,事务过程中的任何一条SQL语句出错,都会回滚整个事务。

hellowork 2006-06-25
  • 打赏
  • 举报
回复
应该跟事务内处理的应用有关,有些错误可能对应用无关紧要,如插入值违反了外键约束,可以不让事务回滚而继续插入其它值.
tiky_6228769 2006-06-22
  • 打赏
  • 举报
回复
楼上的,我就是这么想的,希望听听更多老鸟的意见~
ElderBrother 2006-06-22
  • 打赏
  • 举报
回复
你的做法并没有错。
很多时候我们常用的都是每写一条sql语句紧接判断@@ERROR值,>0的话就回滚。

当然有时候我们不想每天语句都来判断@ERROR值,那么这时候可以用SET XACT_ABORT ON
.

一般写法:
SET XACT_ABORT ON
BEGIN TRAN
...
...
COMMIT TRAN
只要有错误发生都会自动会滚,与我们判断@@ERROR效果一样。不过感觉根据每条语句判断,发生错误时候可以清晰的把具体那一条sql语句错误返回客户端。所以如果不偷懒的话,还是判断@@ERROR较好。
liangpei2008 2006-06-22
  • 打赏
  • 举报
回复
使用@@ERROR对DML进行检测,可以得到出错信息,如果出错信息不重要,用XACT_ABORT就可以了

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧