处理不可服务的事务SQL SERVER

时间:2011-11-10 16:32:51

标签: sql-server-2008 transactions try-catch xact-abort

我有一个以下类别的程序

BEGIN TRY
BEGIN TRAN
...transactins A....
   BEGIN TRY
   .... Transaction B ....
   END TRY
   BEGIN CATCH
   .... Set variables and print messages ....
   END CATCH
....Transaction C
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
...Transaction D
END CATCH

事务B抛出一个错误,因此进程进入一个不可服务的状态并抛出以下错误。我检查了XACT_STATE()值,它是-1

Msg 3930,Level 16,State 1,Procedure xxxxxxxx,Line 70 当前事务无法提交,也无法支持写入日志文件的操作。回滚交易。

有没有其他方法可以通过跳过事务B和执行事务C

来解决这个问题

1 个答案:

答案 0 :(得分:1)

使用事务的全部意义在于其中的操作全部成功或全部失败。如果您要将Transaction CTransaction B失败的影响隔离开,请对每个操作使用单独的BEGIN TRAN/COMMIT/ROLLBACK操作。