【问题标题】:An error has occurred that has caused the transaction to be classified as an uncommittable transaction发生错误,导致事务被归类为不可提交事务
【发布时间】:2016-06-01 03:49:14
【问题描述】:

XACT_STATE() 可以有 1、0、-1 值。当它为 1 时,可以执行任何操作,但当它为 -1 时,只能执行读取或回滚。在哪种情况下事务被归类为不可提交事务。

Here 是 msdn 所说的。

当前请求有一个活跃的用户事务,但是有一个错误 发生导致该交易被归类为 不可提交的交易。请求无法提交事务 或回滚到保存点;它只能请求完全回滚 交易。请求不能执行任何写操作,直到 它回滚事务。该请求只能执行读取 操作,直到它回滚事务。交易后 已经回滚,请求可以读写 操作并可以开始新事务。

【问题讨论】:

    标签: sql-server tsql transactions try-catch


    【解决方案1】:

    取自blog

    当您的交易达到 16 级错误时,交易可能会进入注定失败的状态 (XACT_STATE() =-1),尽管并非总是如上文所述!!

    以下是博客中给出的一些示例:

    --datatype conversion errors:
    
       DECLARE @GUID UNIQUEIDENTIFIER 
       SELECT @GUID = CONVERT(UNIQUEIDENTIFIER, 'ABC')  
    
    ---divide by zero errors:
       SELECT * FROM my_books WHERE Isbn/0 = 2
    
    --dropping column which doesnt exists      
     ALTER TABLE my_books DROP COLUMN author;    
    

    作者还在下面解释了可能导致交易失败的其他错误级别..

    可能会有更多的错误导致交易进入注定失败的状态! 用户可以将此博客作为参考,以确定严重级别为 16 的错误是否会回滚事务。如果您愿意,您还可以测试其他严重性或级别的错误

    还有一个link,这将有助于模拟每个错误级别..

    【讨论】:

      猜你喜欢
      • 2013-06-28
      • 1970-01-01
      • 2015-07-31
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多