如何在不使用触发器或以任何方式修改数据库 struct 的情况下监视SQL Server数据库中的表更改?我喜欢的编程环境是.NET和C#.
我希望能够支持任何SQL Server 2000 SP4或更新版本.我的应用程序是另一家公司产品的一个螺栓连接数据可视化.我们的客户群有数千人,所以我不想要求我们在每次安装时修改第三方供应商的表格.
我所说的"changes to a table"是指对表数据的更改,而不是对表 struct 的更改.
最终,我希望更改能够触发应用程序中的事件,而不是每隔一段时间判断更改.
考虑到我的需求(没有触发器或模式修改,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);
并将返回的校验和与存储的值进行比较.