c#程序实现,监控sql server2005数据库中某一个表的变化,并获取.求大神帮忙

如题所述

尝试这样的思路:

假如你监控A表,将A表的所有ID写入一个检测表中

--创建表 
create table A_CheckUpdate(AID int,BinaryCheckSum int,Remark varchar(50)) 
--将表A的初始数据插入检测更新表中 
insert into A_CheckUpdate select AID,Binary_CheckSum(*),'' from A 
 
--你写一个通信 每隔一段时间 比如5秒钟检查一次
--查询A表被更新过的记录 
select * from A_CheckUpdate 
where exists( 
select AID from A where A.AID=A_CheckUpdate.AID 
and binary_checksum(*)<>A_CheckUpdate.BinaryCheckSum) 
--如果是查看insert 或者delete的数据 请查看A_CheckUpdate是否有多余的ID 或者缺少的ID
select A.Id from A left join A_CheckUpdate on a.ID=A_CheckUpdate.ID
where A_CheckUpdate.ID is null
 
select A_CheckUpdate .Id from A right join A_CheckUpdate on a.ID=A_CheckUpdate.ID
where A.ID is null

追问

那如果是不改动id的情况下,更改了后面的某些内容呢?怎么知道改动是什么?还有我需要怎么在一改动就立刻知道有改动了呢?没隔几秒就查一下嘛?3q

追答

我的提示 就是在主键ID不变的情况下 更新其他列 或者 该表添加了一条数据 或者 删除了一条数据,如果你想找到哪一列被更新了 只能对每一个列 Binary_CheckSum(列1),Binary_CheckSum(列2), Binary_CheckSum(列3), 将保存的int结果保存到检测表中了
如果对该列进行校对 发现不一致了 就说明被更新过了

你可以搞一个线程Thread 每隔100毫秒=0.1秒 就检测一次数据库(调用一个复杂的存储过程,该存储过程的思路类似于我提示的这个)

温馨提示:答案为网友推荐,仅供参考
相似回答