回滚特定的旧SQL事务

时间:2016-05-13 18:51:27

标签: sql-server tsql transactions sql-server-2014

我们有一个相当大的存储过程,它将我们系统中找到的两个人名称相似。它删除并更新许多不同的表(大约10个左右,所有非常不同的表)。它全部包含在一个事务中,如果当然失败则回滚。这可能是一个愚蠢的问题,但是有可能以某种方式稍后存储和回滚此特定事务而无需创建和插入许多历史记录"能够准确跟踪发生了什么的表格?我不想恢复整个数据库,只是存储过程特定事务的结果,以及日后。

2 个答案:

答案 0 :(得分:0)

听起来您可能想要调查Change Data Capture

当数据发生变化时,它仍然会捕获数据,如果您只是为一次执行或非常少量的数据执行此操作,其他方法可能会更好。

答案 1 :(得分:0)

一旦提交了一个事务,就不可能在以后回滚那个事务。从字面意义上讲,你是“承诺”的。显然,您可以从备份中恢复并回滚自特定点以来的每个事务,但这可能不是您要查找的内容。

因此,制作审计表是您唯一的选择。正如另一个答案所指出的,您可以使用数据更改捕获,但除非您已经为企业版分配了大笔资金,否则这不是您的选择。但是,如果您只想撤消这种特定类型的更改,最简单的方法是在您的过程中添加一些代码来执行合并以存储重新拆分它们所需的数据记录,并创建一个执行实际拆分的过程。但您必须记住,您必须处理可能会破坏您执行拆分的“合并”数据的任何更改。这就是为什么SQL无法自动为您执行此操作...它不知道您可能希望如何处理原始事务后可能发生的数据更改。