如何在不使用触发器或以任何方式修改数据库结构的情况下监视 SQLServer 数据库对表的更改?我首选的编程环境是 .NET和 C # 。
我希望能够支持任何 SQLServer2000 SP4或更新。我的申请是另一家公司产品的数据可视化。我们的客户基础数以千计,所以我不希望在每次安装时都要提出修改第三方供应商表的要求。
“桌子的变化”指的是对表数据的更改,而不是对表结构的更改。
最终,我希望这个更改在我的应用程序中触发一个事件,而不是必须每隔一段时间检查更改。
考虑到我的需求(没有触发器或模式修改,SQLServer2000和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);
并将返回的校验和与存储的值进行比较。