[英]SQL Server Transaction rollback
我有下面的代碼。 該代碼在執行腳本時捕獲腳本中的任何錯誤,並回滾從頭開始所做的所有更改。 這解決了我發生任何事情時都回滾事務的問題。
我的問題是,是否需要為在此腳本執行過程中進行的所有事務編寫回退腳本(以后可以在測試應用程序之后使用),是否需要逐條語句執行相反的操作?
例如-在主腳本中,我將插入星值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;
最終,這就是我想要回滾的腳本在以后某個時間點所做的更新。例如說3天之后。所以我今天運行我的腳本,它做了很多更改。使用該應用程序3天后感覺到有問題,所以我想撤消腳本所做的所有更改。
根據您的問題,我發現確定您實際的實際用例有些困難。 但是,數據庫快照可能是您的一個選擇。 可以在TechNet的此處找到更多詳細信息。
如果源數據庫上出現用戶錯誤,則可以將源數據庫還原為創建給定數據庫快照時的狀態。 自快照創建以來,數據丟失僅限於對數據庫的更新。
但是,快照可以在數據庫級別工作,而不是特定於腳本內啟動的事務,而是特定於數據庫上的所有CRUD和DDL操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.