XACT_STATE()
可以包含1,0,-1个值。当它为1时,可以执行任何动作,但是当它为-1时,只能执行读取或回滚。在哪种情况下,交易被归类为不可提交的交易。
Here是msdn所说的。
当前请求具有活动用户事务,但出现错误 发生这种情况导致交易被归类为 不可提交的交易。请求无法提交事务 或者回滚到保存点;它只能请求完全回滚 交易。请求之前不能执行任何写操作 它回滚了交易。请求只能执行读取 操作直到它回滚交易。交易完成后 已经回滚,请求可以执行读写操作 操作并可以开始新的交易。
答案 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将有助于模拟每个错误级别。