小编典典

如何从应用程序监视数据库更新?

sql

我使用带有ODBC,C ++的SQL
Server数据库。我想检测数据库某些表中的修改:另一个应用程序插入或更新行,我必须检测所有这些修改。它不必是立即触发的方法,可以使用轮询定期检查数据库表是否有修改。

以下是我认为可以完成此操作的方式,需要您的意见,无论这是执行此操作的标准/正确方法,还是存在任何更好的方法。

我想到的是:我在SQL
Server中添加触发器,对触发器进行任何修改后,都会将已修改/添加的行的标识符插入到特殊表中,该表将定期从应用程序中检查。假设有3个表:“客户”,“产品”,“服务”。我将创建三个附加表:Change_Customers,Change_Products,Change_Services,并将插入各个表的已修改行的标识符。然后,我将从应用程序中定期读取这些Change_
*表并删除已处理的记录。

现在,如果您同意上述解决方案是正确的,那么我还有另一个问题:为我要监视的每个表单独使用Change_
*表还是更好,还是最好有一个胖的Changes表来包含要从中进行的更改?所有表。


阅读 179

收藏
2021-05-16

共1个答案

小编典典

查询通知是一种旨在 完全执行
您所描述的功能的技术。您可以通过众所周知的SqlDependency类利用来自托管客户端的查询通知,但是也有本机Ole
DB和ODBC方式。请参阅使用查询通知中有关SSPROP_QP_NOTIFICATION_MSGTEXT(OleDB)和
SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT(ODBC)的段落。有关查询通知如何工作的说明,请参见神秘通知

这是唯一可与任何类型的更新一起使用的免轮询解决方案。触发器和轮询更改存在严重的可伸缩性和性能问题。变更数据捕获和变更跟踪实际上涵盖了一个不同的主题(同步偶尔连接的设备的数据集,例如Sync
Framework)。

2021-05-16