【发布时间】:2010-09-05 05:29:51
【问题描述】:
如何在不使用触发器或以任何方式修改数据库结构的情况下监视 SQL Server 数据库以了解对表的更改?我首选的编程环境是.NET 和 C#。
我希望能够支持任何SQL Server 2000 SP4 或更高版本。我的应用程序是另一家公司产品的附加数据可视化。我们的客户群数以千计,因此我不想要求我们在每次安装时都修改第三方供应商的表格。
“更改表格”我的意思是更改表格数据,而不是更改表格结构。
最终,我希望更改触发我的应用程序中的事件,而不是必须每隔一段时间检查更改。
考虑到我的要求(没有触发器或架构修改,SQL Server 2000 和 2005),最好的做法似乎是使用 T-SQL 中的 BINARY_CHECKSUM 函数。我打算实现的方式是这样的:
每 X 秒运行一次以下查询:
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
并将其与存储的值进行比较。如果值已更改,请使用查询逐行浏览表:
SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);
并将返回的校验和与存储的值进行比较。
【问题讨论】:
-
他们没有碰巧在他们的行上加上最后修改的时间戳,是吗?
-
作为记录,如果版本支持是 SQL Server 2005 或更高版本。我将看看 SQL Server 的 Service Broker 功能。
标签: sql sql-server datatable rdbms