我有以下代碼。該代碼捕獲腳本執行過程中的任何錯誤,並回滾從開始進行的所有更改。這解決了我發生任何事情時回滾事務的問題。SQL Server事務回滾
我的問題是,如果我必須編寫一個回滾腳本(可以在測試應用程序後稍後使用),以執行在此腳本執行期間所做的所有事務嗎?是否需要按語句聲明並做相反的事情
例如 - 在主要腳本中我插入星號值1,然後在回滾腳本中,我做 從星號刪除,其中id = 1或者是否存在其他自動執行方式。
就像我們可以以某種方式調用SQL Server事務日誌並告訴它在我們稍後的腳本執行過程中所做的事務。
--This works to roll back the changes during script execution
SET XACT_ABORT ON;
GO
BEGIN TRANSACTION
-- Batch 1
BEGIN TRY
CREATE TABLE Persons (
PersonID int
);
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
END CATCH;
GO
-- Commit transaction
IF XACT_STATE() = 1
BEGIN
COMMIT TRANSACTION;
PRINT 'Transaction committed.';
END;
歸根結底,這就是我要的是after..So今天我跑我的腳本回滾我的劇本在稍後進行的更新中time..say 3天,這讓一堆的變化..在使用應用程序3天后,我感覺有些問題是錯誤的,所以我想撤銷腳本所做的所有更改。
我很困惑。這聽起來像你只是想*最後提交交易。我讀了你的問題3次,但仍然沒有明白你的意思。你說的**劇本是什麼?是否有其他東西會製作一堆插頁,然後你想退出? – scsimon
對不起,如果我讓它感到困惑..我想要的是回滾我的腳本在稍後的時間點做出的更新..在2天后...所以我今天運行我的腳本,它做了一堆改變..後3天使用應用程序我感覺有些問題是錯誤的,所以我想撤銷腳本所做的所有更改。 – user1221989
好吧,那麼在這種情況下,我認爲只需備份數據庫並在測試環境中運行它就行了,除非您能夠跟蹤所有更改並將其反轉。 – scsimon