2012-08-27 33 views
0

我需要刪除2個表中的數據在SQL Server 2008中多個事務

我有兩個表A和B.我需要把每一個單獨的事務。

這是我正在使用的代碼。

BEGIN TRANSACTION; 
BEGIN TRY 
    DELETE  from A 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
     ROLLBACK TRANSACTION; 

END CATCH 

IF @@TRANCOUNT > 0 
    COMMIT TRANSACTION; 


BEGIN TRANSACTION; 
BEGIN TRY 
    DELETE  from B 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
     ROLLBACK TRANSACTION; 
END CATCH 

IF @@TRANCOUNT > 0 
    COMMIT TRANSACTION; 

是否有更好的方法來實現SQL Server中的多個事務和錯誤處理?

我需要爲每個表放置單獨的事務。

其中一個交易失敗時出現錯誤。

事務計數後EXECUTE表示 失配數BEGIN和COMMIT語句。這些記錄不是從其他 交易

+0

讓我們希望,交易不在調用SP之前打開* SQL Server事務管理是如此翻轉腦殘。因此,我的「解決方案」是將所有交易留給呼叫者。 – 2012-08-27 06:28:56

+0

哪一個是被接受的答案? – DtechNet

回答

4

刪除試試這個:

BEGIN TRANSACTION; 
BEGIN TRY 
    DELETE from A 
    COMMIT TRANSACTION; 
END TRY 
BEGIN CATCH 
ROLLBACK TRANSACTION; 
END CATCH 


BEGIN TRANSACTION; 
BEGIN TRY 
    DELETE  from B 
    COMMIT TRANSACTION; 
END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION; 
END CATCH 
0

可能是你能做到這樣:

BEGIN TRANSACTION one; 
BEGIN TRY 
    DELETE  from A 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
     ROLLBACK TRANSACTION one; 

END CATCH 

IF @@TRANCOUNT > 0 
    COMMIT TRANSACTION one; 


BEGIN TRANSACTION two; 
BEGIN TRY 
    DELETE  from B 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
     ROLLBACK TRANSACTION two; 
END CATCH 

IF @@TRANCOUNT > 0 
    COMMIT TRANSACTION two;