关于事务回滚,有些不明白,不知道rollback tran在什么时候用。 begin tran update 表1 update 表2 commit tran 这种写法,在更新表1或表2时出错,事务会不会自动回滚? 如果要加上rollback tran应该加在什么地方?每执行更新表后都用if @@error<>0 rollback tran做个判断吗? |
--我比较习惯加xact_abort选项 SET XACT_ABORT ON begin tran
update 表1
update 表2
commit tran
|
BEGIN TRANSACTION
BEGIN TRY
sql_statement
COMMIT
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
|
begin tran
update 表1
if @@error<>0 begin rollback tran
return
end update 表2
if @@error<>0 begin rollback tran
return
end commit tran
|
就看你的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 结论:如果第二个语句发生错误,,那么整个事务将会自动的回滚。因此可以保证你的数据的一致性,因此不需要对错误进行判断。 |
上面写错了 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 |
关于事务回滚,rollback tran到底要不要写?
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
大家来决定:python-office运行时的提示信息,要不要删除?
你来决定,我来开发
python 开源项目 -
JavaScript中到底要不要写分号呢?
在我们介绍 JavaScript 语法的全局结构之前,我们先要探讨一个语言风格问题:究竟要不要写分号?这是一个非常经典的口水问题,“加分号”党和“不写分号”党之间的战争,
前端开发 JavaScript 换行符 运算符 Express -
到底要不要考研?
嗯?你说呢?
读研 大数据 计算机类 专业知识 编程开发 -
要不要写点啥呢?
一本小小的红色写作书 开门见山 把重要的话说在前头 A、听——准确抓住重点 B、说——清晰、有条理 C、读——快速理解意思 D、写——有序表达
有序表 javascript html -
我到底要不要考研
面对考研和工作,该怎么选择呢?
读研 公众号 单片机 -
我要不要写技术文章
我很喜欢一句话,这也是我为什么一直喜欢写文章的原因之一。输出倒逼输入写技术文章真的技术)。写文章也是,我写了 git
编程语言 公众号 微信 解决方法