如何捕获SQL Server 2008 R2中的表级数据更改?

时间:2011-06-24 01:56:44

标签: sql-server sql-server-2008 data-warehouse

我将大量数据归一化为100多个表格。有多个应用程序可以更改这些表中的基础数据,我想在这些更改上引发事件。我所知道的可能选择是:

  • 更改数据捕获
  • 更改跟踪
  • 在每个表上使用触发器(错误选项但可能)

如果某人之前已经这样做了,有人可以分享最好的方法吗?

我真正想要的是,如果有一个事务影响了12个表,那么我应该能够将一个事件冒泡而不是12个。假设有并发用户更改这些表。

3 个答案:

答案 0 :(得分:0)

我能想到的两个选择:

  1. 触发器是捕获数据库层中更改事件的正确方法
  2. Codewise,我确保在我的应用程序中,每个表都只通过代码中的一个位置进行更改,无论更改是什么(我将其称为该表的中心,因为它将许多不同的路径引导到一个位置),在代码层中捕获更改事件变得非常容易

答案 1 :(得分:0)

一种可能性是SQL Server查询通知:Using Query Notifications

答案 2 :(得分:0)

只要您想“批量”多项更改,我认为您应该遵循更改数据捕获更改跟踪的路线(取决于您是否只是想要知道发生了什么变化或发生了什么变化。

它们应该被'轮询'程序使用,在那里你每几分钟(秒,毫秒???)轮询一次更改并引发事件。关于这一点的好处是,只要您存储上一个轮询的最后一个rowversion - 对于每个表 - 您可以随时检查自上次轮询以来的更改。您不依赖于实时触发器方法,如果暂停,您将永远丢失所有事件。可以在检查每个表的过程中轻松创建该过程,并且每个表只需要一个表来存储最后一个rowversion。

此外,此方法的开销将由您和轮询发生的频率控制。