sql - 检查 SQL Server 表的更改?

标签 sql sql-server datatable rdbms

如何在不使用触发器或以任何方式修改数据库结构的情况下监视 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);

并将返回的校验和与存储的值进行比较。

最佳答案

看一下 CHECKSUM 命令:

SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM sample_table WITH (NOLOCK);

只要表内容没有更改,每次运行都会返回相同的数字。有关详细信息,请参阅我的帖子:

CHECKSUM

以下是我如何在表更改时使用它来重建缓存依赖项:
ASP.NET 1.1 database cache dependency (without triggers)

关于sql - 检查 SQL Server 表的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36/

相关文章:

php - 将 Start_date 与 SQL 中的当前日期进行比较

sql - T-SQL 错误 : "The multi-part identifier X.Y could not be bound"

sql - 使用 where 条件在家谱 View 中显示数据

sql-server - 使用 NTILE 计算百分位数排名?

c# - Web Api 服务器端处理和数据表参数

mysql - SQL 查询不使用 INSERT IGNORE INTO 添加新条目

mysql - 取消透视 MySQL 中的多列

datatable - Play Framework : How to render a table structure from plain SQL table

jquery - 使用 AJAX Source 将 JSON 数据加载到 JQuery DataTables

php - 返回重复结果 SQL?