日期:2014-05-17  浏览次数:20451 次

sql server事务中语句报错后,事务实际状态测试总结,请看看是否正确?
我自己对asp.net 后台如何写事务一直感到疑惑,原因是何时使用回滚以及是否可以回滚成功(可能会失败哦)一直比较烦恼,
今天特地在SQL SERVER查询分析器中对事务报错后的情况作了仔细测试分析,得出如下总结,希望高手看过后发现错误,给予指正,搞清了这个原理,再后台写事务就能正确把握使用回滚了,谢谢了,以下为总结全文:


在sql server查询分析器中
一个事务中碰到错误的SQL 语句时:按错误语句类型分为如下四种情况

1、如果报错的语句是insert语句

这个时候如果xact_abort 为off(默认)的话,那么仅自动回滚该出错的语句,对事务其余部分不会
产生任何影响,就是等于把错误的SQL语句删除后再运行的话,跟删除前运行的效果是一样的。
如果是ON的话,那么立即终止整个事务,并且回滚整个事务

2、如果碰到报错的语句是update语句

那么这个时候无论xact_abort是什么值,都按xact_abort=ON时的效果处理,就是立即终止
事务并回滚整个事务

3、如果碰到报错的语句是select语句

那么无论xact_abort是什么值,事务中其余语句都不会执行(感觉好象都是先执行select语句
再考虑执行其它语句的),并且事务自动终止,由于其余语句都没试行,所以没必要考虑回滚

4、如果碰到报错语句是delete语句

这个时候如果xact_abort 为ON的话,那么立即终止整个事务,并且回滚整个事务,
如果xact_abort 为OFF(默认)的话,那么在语句报错后,事务就停止在那里,

注:查看当前事务状态可以用xact_state()函数

------解决方案--------------------
说的是正确的啊  总结得不错
------解决方案--------------------
SET XACT_ABORT
指定当 Transact-SQL 语句产生运行时错误时,Microsoft? SQL Server? 是否自动回滚当前事务。

语法
SET XACT_ABORT { ON 
------解决方案--------------------
 OFF }

注释
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。对于大多数 OLE DB 提供程序(包括 SQL Server),隐性或显式事务中的数据修改语句必须将 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。有关更多信息,请参见分布式查询和分布式事务。 


------解决方案--------------------
怎么没说commit和rollback
------解决方案--------------------
mark
------解决方案--------------------
引用:
SET XACT_ABORT
指定当 Transact-SQL 语句产生运行时错误时,Microsoft? SQL Server? 是否自动回滚当前事务。

语法
SET XACT_ABORT { ON 
------解决方案--------------------
 OFF }

注释
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 T……

+
+
------解决方案--------------------

set xact_abort off
begin tran
  select 1/0 
  print 'will be prited!'
commit tran

------解决方案--------------------

if object_id('ta') is not null
 drop table ta
go
create table ta(col1 int, col2 char)
go

set xact_abort off
begin tran

insert into ta
values(1/0, 'c')

print 'will been printed'

insert into ta
values(convert(int, 'ac'), 'd')

print 'will not been printed'

commit tran

------解决方案--------------------
不可能尽述所有情况,总结还是不错的。
------解决方案--------------------