>  기사  >  데이터 베이스  >  [20131014] 出现错误,显示事务没有回滚

[20131014] 出现错误,显示事务没有回滚

WBOY
WBOY원래의
2016-06-07 17:38:48814검색

[20131014] 出现错误,显示事务没有回滚 测试代码: TRY DELETE dbo.T TRY BEGIN CATCH CATCH COMMIT /* 问题:1.SELECT * FROM [不存在的表] 为什么会直接跳出,不完成事务?2.SELECT * FROM [不存在的表] 是否属于编译错误?3.修改为SET XACT_ABORT ON 可以回

[20131014] 出现错误,显示事务没有回滚

测试代码:

TRY DELETE dbo.T TRY BEGIN CATCH CATCH COMMIT /*问题: 1.SELECT * FROM [不存在的表] 为什么会直接跳出,不完成事务? 2.SELECT * FROM [不存在的表] 是否属于编译错误? 3.修改为SET XACT_ABORT ON 可以回滚,如果SELECT * FROM [不存在的表]是编译错误 那么联机文档中:编译错误(如语法错误)不受 SET XACT_ABORT 的影响。如何解释? */

问题:

  在一个session中运行以上代码,然后在另外一个session运行 select * from T,发现select语句被堵塞

原因:

      sql 编译的流程 Parse->Bind->Optimize->Execute

      一般认为从Parse到Optimize 是编译阶段,,Execute是执行阶段

  猜测try catch不会再Bind和Optimize阶段出现的错误进行捕获,以上出现的错误可能不被认为是编译错误,所以,使用 xact 为on是可以成功自动回滚

解决方法:

     使用 SET XACT_ABORT ON 来回滚事物

posted on

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.