XACT_STATE()可以有1,0,-1的值。当它是1时,任何操作都可以执行,但是当它是- 1时,只能读取或回滚。在这种情况下,事务被归类为不可提交的事务。
这里是msdn所说的。
当前请求有一个活动的用户事务,但是发生了一个错误,导致事务被归类为一个不可提交的事务。请求不能提交事务或回滚到保存点;它只能请求事务的完整回滚。在回滚事务之前,请求不能执行任何写操作。请求只能执行读操作,直到它回滚事务。事务回滚后,请求可以同时执行读和写操作,并可以开始一个新事务。
发布于 2016-02-19 14:50:32
取自博客
当您的事务达到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引发的错误是否会回滚事务。如果您愿意,也可以使用其他严重程度或级别测试错误。
再多一个链接,它将帮助模拟每个错误级别。
https://stackoverflow.com/questions/35507558
复制相似问题