2012-07-27 68 views
2

我想要一個表SQL ROLLBACK TRANSACTION

BEGIN TRAN 

DELETE FROM TABLEA 
DELETE FROM TABLEB 

ROLLBACK TRAN 

在刪除數據但是,當我檢查表中的數據,該數據確實存在。

+7

艾姆.....以及你期望的*?在交易的上下文中,您正在從兩個表中刪除。然後,您**回滾**該事務 - 這意味着:在該事務**中所做的所有更改都不會應用於數據庫**。所以這些數據行**並未真正刪除** - 這就是交易的全部要點! – 2012-07-27 14:04:47

+0

但他表示它「存在」... – 2013-09-30 18:03:35

回答

5

如果您正在回滾事務,您將取消未完成的更改。 如果您打開一個事務,刪除和回滾,數據將存在。

如果你想提交事務(刪除信息),然後做

BEGIN TRAN 

DELETE FROM TABLEA 
DELETE FROM TABLEB 

COMMIT TRAN 
1

更換

ROLLBACK TRAN 

COMMIT TRAN 

,數據將被刪除。 rollback tran表示取消交易中所做的所有更改。

3

以下是有關TRANSACTION在SQL Server

事務是一個工作單元一些解釋。如果事務成功,則在事務期間進行的所有數據修改都將被提交併成爲數據庫的永久部分。如果事務遇到錯誤並且必須被取消或回滾,則所有數據修改都將被刪除。

請注意,使用TRANSACTION會暫時鎖定表格,因此您必須小心。

BEGIN TRAN 
    Statement1 
    Statement2 
COMMIT TRAN 

如果語句中的一個出現故障或有一些錯誤的transactionrollback和忽略所有的發言,並

當您使用ROLLBACK TRAN它抹去從一開始所做的所有數據修改將不會有變化在transaction使用COMMIT TRAN代替

0
BEGIN TRY 
BEGIN TRAN 

DELETE FROM TABLEA 

DELETE FROM TABLEB 

COMMIT TRAN 
END TRY 

BEGIN CATCH 
SELECT 
     ERROR_NUMBER() AS ErrorNumber 
     ,ERROR_SEVERITY() AS ErrorSeverity 
     ,ERROR_STATE() AS ErrorState 
     ,ERROR_PROCEDURE() AS ErrorProcedure 
     ,ERROR_LINE() AS ErrorLine 
     ,ERROR_MESSAGE() AS ErrorMessage 

IF @@TRANCOUNT > 0 
     ROLLBACK TRANSACTION 
END CATCH 

如果你有一個交易超過一個動作,你應該總是使用try-catch塊回滾一切交易的一部分失敗。

1

--as摘要

BEGIN TRAN 

DELETE FROM TABLEA 
DELETE FROM TABLEB 

ROLLBACK/COMMIT TRAN 

--ROLLBACK:在名稱回滾,將取消該過程。

--COMMIT:在名稱commit中,它將確認過程。

相關問題