SQLServer陷阱(二) 运行时错误与自动回滚事务
2008-06-11 10:21
190 查看
有些人认为一个批查询在执行中发生了错误, 这个查询就会中止, 其实是错误的.
例1:
结果会先报一个
服务器: 消息 8134,级别 16,状态 1,行 2
遇到被零除错误。
然后输出结果集 1.
例2:
结果只报错, 不会输出结果.
例3:
请在查询分析器中新建连接执行
第二个insert会产生违反主键约束错误, 但是执行结束后你会发现事务已经提交并且table1中已经有两行记录1与2
例4:
执行结束后, table2中没有记录, 说明事务已经回滚.
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
一般批查询中 SET XACT_ABORT 默认为 OFF, 隐式开启的事务如触发器中SET XACT_ABORT 默认为ON
例1:
declare @i int set @i = 1 / 0 set @i = 1 select @i
结果会先报一个
服务器: 消息 8134,级别 16,状态 1,行 2
遇到被零除错误。
然后输出结果集 1.
例2:
set xact_abort on
declare @i int set @i = 1 / 0 set @i = 1 select @i
结果只报错, 不会输出结果.
例3:
请在查询分析器中新建连接执行
create table table1(id int primary key) begin tran insert into table1 values (1) insert into table1 values (1) insert into table1 values (2) commit tran
第二个insert会产生违反主键约束错误, 但是执行结束后你会发现事务已经提交并且table1中已经有两行记录1与2
例4:
set xact_abort on create table table2(id int primary key) begin tran insert into table2 values (1) insert into table2 values (1) insert into table2 values (2) commit tran
执行结束后, table2中没有记录, 说明事务已经回滚.
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
一般批查询中 SET XACT_ABORT 默认为 OFF, 隐式开启的事务如触发器中SET XACT_ABORT 默认为ON
相关文章推荐
- JDBC对事务的使用(包括自动提交,回滚等知识)
- Spring学习笔记——Spring事务只对运行时异常回滚
- SET XACT_ABORT { ON | OFF }SQL Server 是否自动回滚到当前事务
- "服务器无法继续该事务 3400000006"错误原因--JAVA调用SQLSERVER存储过程时过程发生异常内部事务未提交
- SQL操作access文件出现事务回滚错误
- sqlserver事务与回滚
- Junit进行数据库操作时事务自动回滚
- 转:应用程序连接到 SQLServer 是运行 Windows Server 2003 服务器上时出现错误信息
- 触发器引起"事务(进程 ID 88)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。"的错误
- SQL Server 事务执行一半出错是否自动回滚整个事务 推荐
- Spring-test事务自动回滚
- 使用事务自动回滚来实现单元测试
- Proxool+hibernate+spring时事务自动回滚导致无法提交的问题解决
- junit 单元测试事务自动回滚
- Instance Nine:使用Transaction(事务) 手动提交,自动回滚
- Spring中抛出异常时,既要要返回错误信息,还要做事务回滚
- springboot项目上有个红叉,且ecplise没有自动编译项目,运行提示“错误: 找不到或无法加载主类”
- sql 事务自动回滚(笔记)
- MySQL 的异常与事务结合的使用方法。并带自动回滚!
- Spring Hibernate 单元测试配置为事务自动回滚时需要提交事务时的处理