2011-11-10 252 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