DotNet学习笔记

导航

SqlServer事务回滚失败

今天在写存储过程的时候,写了一个同时删除两个表数据的SP,使用了事务操作
测试一下,结果事务中出现了错误,原来做了外键,删除的顺序错了,正准备改了再继续.
却发现,刚事务失败应该进行回滚操作,可数据却删除了.再看另一个表,数据却还在.
看了刚sp的操作日志:第一条出错,第二条通过.
这就奇怪了.google下,没找到相同的问题.
把外建去掉,一样回滚失败,1小时后,还是无解
休息一下,喝杯水,突然想到,这不是本机,是局域网的一台2000的数据库,曾经因为安全的问题,被当时的网管修改了很多设置
该不会是把把回滚设置为Off吧
输入SET XACT_ABORT ON 再运行SP回滚正常.
郁闷啊,足足浪费我近两小时.


当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。

当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。OFF 是默认设置。

编译错误(如语法错误)不受 SET XACT_ABORT 的影响。


对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。有关详细信息,请参阅分布式查询和分布式事务

SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。

http://technet.microsoft.com/zh-cn/library/ms188792.aspx

posted on 2008-05-22 22:47  烟丝  阅读(2477)  评论(0编辑  收藏  举报