Rumah  >  Artikel  >  pangkalan data  >  [20131014] 出现错误,显示事务没有回滚

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

WBOY
WBOYasal
2016-06-07 17:38:48834semak imbas

[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

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya: SQL Server2005配置同步复制Artikel seterusnya:数据库设计的三范式