2011-11-10 158 views
0

我有一个过程,它是整理以下处理Uncommitable交易SQL SERVER

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被抛出错误的,并且由于这种工艺要到uncommitable状态,并抛出下面的错误。我已检查过XACT_STATE()值-1

消息3930,级别16,状态1,过程xxxxxxxx,行70 当前事务无法提交并且不能支持写入日志文件的操作。回滚事务。

是否有任何其他方式如何跳过事务B和执行业务C

回答

1

使用事务的整点有些过度过来这是在它的操作要么全部成功,要么全部失败。如果您想从Transaction B的故障影响中分离出Transaction C,则对每个操作分别使用BEGIN TRAN/COMMIT/ROLLBACK操作。

+0

我在wesites中看到了嵌套事务可以提供帮助的情景。但我无法实现它。你有什么想法在这个相关吗? – Santy

+0

从[文档](http://msdn.microsoft.com/zh-cn/library/ms189336.aspx)中提到的有关嵌套事务的一个关键点是,提交内部事务被SQL Server数据库引擎忽略。事务根据在最外层事务结束时采取的动作提交或回滚,如果外层事务被提交,则内层嵌套事务也被提交;如果外层事务被回滚,则所有内层事务也被回滚,不管内部交易是否单独承诺。“ –

+0

谢谢Joe提供的宝贵信息... – Santy