在事务期间跟踪SQL Server中的更改

时间:2009-09-23 17:30:13

标签: sql sql-server tsql transactions

我的雇主开发了一个实用程序,它将逐行对DataTable运行存储过程,将每行的字段作为参数传递到存储过程。这对自动导入特别有用。

但是,我现在需要扩展它以提供事务化版本,以便我们可以看到运行该实用程序的潜在结果,以提供对数据库所做的更改的摘要。这可能与“插入Customer表中的3行”或“Orders表中修改的5行”一样多。然后,用户可以决定是否继续进行真正的导入。

我知道可以在表上设置触发器,但是在这种情况下我不确定这是否可行,因为存储过程引用的所有表都不可知。

是否有其他方式可以查看交易期间所做的更改,或者是否有人就如何实现此目标提出任何其他建议?

非常感谢。

2 个答案:

答案 0 :(得分:0)

根据反馈进行编辑并重新阅读问题:

我同意Remus的观点,即没有严肃的数据导入者在将数据导入系统时需要直观地检查数据。

作为ETL Writer,我希望在我的暂存区域中执行此操作,并运行在将数据导入实际生产场所之前验证我的数据的查询。

您还可以通过实现“保留”事务的功能来解决资源,死锁和阻塞问题,直到某人在视觉上确定为止。

答案 1 :(得分:0)

您对当前的LSN进行快照,在事务中逐行执行“过程”过程,然后使用fn_dblog在您创建快照的LSN之后回读日志。所做的更改是日志中记录了当前事务ID的记录。可以回滚包装器事务。当然,这仅适用于在Customer和5行订单中导入3行,没有严肃的雇主会考虑在实际大小的导入作业上执行此类操作。想象一下,只需要输入1 mil订单来计算它们,然后回滚......

这不适用于任何任意过程,但通常时间过程会进行自己的事务管理,并且在包装事务下调用时它们无法按预期工作。