发生错误导致事务被归类为不可提交的事务

时间:2016-02-19 14:23:35

标签: sql-server tsql transactions try-catch

XACT_STATE()可以包含1,0,-1个值。当它为1时,可以执行任何动作,但是当它为-1时,只能执行读取或回滚。在哪种情况下,交易被归类为不可提交的交易。

Here是msdn所说的。

  

当前请求具有活动用户事务,但出现错误   发生这种情况导致交易被归类为   不可提交的交易。请求无法提交事务   或者回滚到保存点;它只能请求完全回滚   交易。请求之前不能执行任何写操作   它回滚了交易。请求只能执行读取   操作直到它回滚交易。交易完成后   已经回滚,请求可以执行读写操作   操作并可以开始新的交易。

1 个答案:

答案 0 :(得分: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;    

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

可能会有更多错误导致交易陷入注定状态! 用户可以参考此博客作为参考,以确定使用severity \ level 16引发的错误是否会回滚事务。如果您希望也可以测试其他严重程度或级别的错误

另外一个link将有助于模拟每个错误级别。