我使用ODBC,C ++处理SQL Server数据库。我想检测数据库的某些表中的修改:另一个应用程序插入或更新行,我必须检测所有这些修改。它不一定是直接触发器,可以使用轮询来定期检查数据库表以进行修改。
以下是我认为可以这样做的方式,并且需要您的意见,无论这是标准/正确的方式,还是存在任何更好的方法。
我想到的是:我在SQL Server中添加了触发器,在任何修改中,都会将修改/添加的行的标识符插入到特殊的表中,我将定期从我的应用程序中检查。假设有3个表:客户,产品,服务。我将再创建三个表:Change_Customers,Change_Products,Change_Services,并将插入相应表的已修改行的标识符。然后我会定期从我的应用程序中读取这些Change_ *表并删除已处理的记录。
现在,如果您同意上述解决方案是正确的,我还有另一个问题:为我希望监控的每个表都有单独的Change_ *表是否更好,或者更好的是有一个胖的更改表将包含所有表格的变化。
答案 0 :(得分:3)
Query Notifications是专为完全所描述的内容而设计的技术。您可以通过众所周知的SqlDependency类从托管客户端利用查询通知,但也有本机Ole DB和ODBC方法。请参阅Working with Query Notifications,关于SSPROP_QP_NOTIFICATION_MSGTEXT
(OleDB)和SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT
(ODBC)的段落。有关查询通知如何工作的说明,请参阅The Mysterious Notification。
这是唯一可以与任何类型的更新一起使用的无投票解决方案。触发和轮询更改具有严重的可伸缩性和性能问题。变更数据捕获和变更跟踪实际上涵盖了不同的主题(为偶尔连接的设备同步数据集,例如同步框架)。
答案 1 :(得分:1)
更改数据捕获(CDC)--http://msdn.microsoft.com/en-us/library/cc645937.aspx
首先,您需要在数据库中启用CDC :: 使用db_name 走 EXEC sys.sp_cdc_enable_db GO
然后在桌面上启用CDC :: sys.sp_cdc_enable_table
然后您可以查询更改
答案 2 :(得分:0)