我有以下代码。此代码捕获脚本执行过程中的任何错误,并回滚从开始执行的所有更改。这解决了我在发生任何事情时回滚交易的问题。
我的问题是,如果我必须编写一个回滚脚本(可以在测试应用程序之后使用),我在此脚本执行期间所做的所有事务都需要逐个语句并执行完全相反的操作< / p>
例如 - 在主脚本中我执行Insert Into Star Values 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天后应用程序我感觉有些错误,所以我想撤消脚本所做的所有更改。
答案 0 :(得分:0)
根据您的问题,我发现确定您的实际真实用例有点困难。但是,数据库快照可能是您的选择。更多详情可在here in TechNet
中找到如果源数据库上存在用户错误,则可以将源数据库还原到创建给定数据库快照时的状态。自创建快照以来,数据丢失仅限于数据库的更新。
但是,快照在数据库级别工作,并不是特定于脚本中启动的TRANSACTIONS,而是特定于数据库上的所有CRUD和DDL操作。