我有下面的代码。此代码在执行脚本时捕获任何错误,并回滚从一开始所做的所有更改。这解决了我在发生任何事情时回滚事务的问题。
我的问题是,如果我必须为我在这个脚本执行过程中所做的所有事务编写回滚脚本(在测试应用程序之后可以使用),那么我需要逐条语句执行,并执行完全相反的操作吗?
在主脚本中,我确实插入到星值1中,然后在回滚脚本中,我从星空中删除id =1,或者有其他一些自动化的方法来完成它。
就像我们可以以某种方式调用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;最终,我想要的是回滚我的脚本在time..say 3天以后所做的更新,after..So,我今天运行了我的脚本,使用这个应用程序让一堆changes..After 3天,我感觉到有些地方不对劲,所以我想撤销脚本所做的所有更改。
发布于 2017-09-15 10:38:58
基于您的问题,我发现很难确定您实际的实际用例。但是,数据库快照可能是您的一种选择。更多细节可在在TechNet这里中找到
如果源数据库出现用户错误,则可以将源数据库还原到创建给定数据库快照时的状态。数据丢失仅限于自快照创建以来对数据库的更新。
但是,快照工作在DB级别,并不是特定于脚本中启动的事务,而是数据库上的所有CRUD和DDL操作。
https://stackoverflow.com/questions/45887992
复制相似问题