SQL Server 事务自动回滚
2012-08-21 23:12
302 查看
要在事务中执行一堆 SQL,比方说通过一组 insert 语句插入很多数据,以前我习惯这样写:
begin tran t1
-- bala bala
-- bala bala
if @@error = 0
commit tran t1
else
rollback tran t1
今天编写一个类似脚本的时候发现,中间一个 insert 语句失败了,但是其他语句却继续执行了,导致了事务没有整体回滚的现象。非常坑爹。
查了一下,原来是有一个开关 XACT_ABORT. 默认是 off 的,也就是说事务 fail 的时候不会自动回滚所有事务范围内的语句,只会回滚直接引起错误的那一条语句。而要实现整体回滚的效果,只要在事务开始之前把这个开关置为 on 即可。
代码如下:
set xact_abort on
go
begin tran t1
-- bala bala
-- bala bala
commit tran t1
参考:
http://stackoverflow.com/questions/1749719/sql-server-transactions-roll-back-on-error
http://sqlinthewild.co.za/index.php/2011/05/17/on-transactions-errors-and-rollbacks/
begin tran t1
-- bala bala
-- bala bala
if @@error = 0
commit tran t1
else
rollback tran t1
今天编写一个类似脚本的时候发现,中间一个 insert 语句失败了,但是其他语句却继续执行了,导致了事务没有整体回滚的现象。非常坑爹。
查了一下,原来是有一个开关 XACT_ABORT. 默认是 off 的,也就是说事务 fail 的时候不会自动回滚所有事务范围内的语句,只会回滚直接引起错误的那一条语句。而要实现整体回滚的效果,只要在事务开始之前把这个开关置为 on 即可。
代码如下:
set xact_abort on
go
begin tran t1
-- bala bala
-- bala bala
commit tran t1
参考:
http://stackoverflow.com/questions/1749719/sql-server-transactions-roll-back-on-error
http://sqlinthewild.co.za/index.php/2011/05/17/on-transactions-errors-and-rollbacks/
相关文章推荐
- SET XACT_ABORT { ON | OFF }SQL Server 是否自动回滚到当前事务
- SET XACT_ABORT { ON | OFF }SQL Server 是否自动回滚到当前事务
- SQL Server事务执行一半出错是否自动回滚整个事务 【转】
- SQL Server 事务执行一半出错是否自动回滚整个事务
- SQL Server 事务执行一半出错是否自动回滚整个事务 推荐
- SQL Server 出错自动回滚
- SQL Server:在事务中回滚TRUNCATE操作
- 在asp.net Sql server (可以是存储过程)中使用事务回滚
- SQL Server:在事务中回滚TRUNCATE操作
- SQL Server事务的回滚
- Spring自动回滚的事务管理配置
- [转]SQL Server 事务处理 回滚事务
- Spring Hibernate 单元测试配置为事务自动回滚时需要提交事务时的处理
- SQL Server中事务日志自动增长对性能的影响
- sql server 事务的回滚 断电
- Sql Server 事务/回滚
- junit 单元测试事务自动回滚
- SQL Server 2005/2008/2012中事务回滚的一个充分条件
- SET XACT_ABORT ON [SQL SERVER] 设置事务全部回滚
- SQL Server中TRUNCATE事务回滚操作方法