请问实时监控数据的解决方案
我的程序想实时监控sqlserver数据库中某一个表是否添加了一个新记录,怎么做?
写一个触发器,如果insert新记录则在另外一个临时表中添加一个记录,程序开一个线程去不断读取临时表记录并处理、删除?
问题点数:100、回复次数:9Top
1 楼wgsasd311(自强不息)回复于 2006-03-03 11:34:13 得分 0
create trigger ti_tb on tb
for insert
as
insert tb_history
select * from inserted
goTop
2 楼lsqkeke(可可)回复于 2006-03-03 11:50:56 得分 0
YESTop
3 楼cctime()回复于 2006-03-03 11:55:19 得分 0
我想知道的不是如何创建触发器,我是想知道对这种需求的整体方案。
比如,程序是不是要开线程不断读取临时表?如何读取?用游标?还是每次循环打开临时表,select,再delete已经处理掉的临时表记录,再close?Top
4 楼mm2love2zz(never stop.)回复于 2006-03-03 12:03:57 得分 0
读取临时表看你是需要怎么样的数据,如果你想在每次插入新数据的时候程序端可以随时更新显示出临时表中的数据内容,可以在插入数据的时候,后面跟个select语句,从临时表中选择出数据并在程序端显示。
也可以用时间控件,定时从临时表中读取数据
也可以用一个按扭控件来刷新(手工)Top
5 楼wgsasd311(自强不息)回复于 2006-03-03 12:08:26 得分 0
不要用游标,可以在历史记录表里加一个字段flag(是否处理了),默认值为0即没有处理,
处理后把它变为了即可.Top
6 楼cctime()回复于 2006-03-03 12:36:19 得分 0
重复一下,引起数据变化的程序(或其他对象)和要监控数据变化的程序是两个不相关的程序;
看来大家都已经同意用触发器了,那剩下的问题就是:
1、触发器把哪些数据存入临时表?A、原始insert的拷贝 B、原始insert记录id C、是否已处理标志
2、如何读取临时表?程序连接到数据库,打开临时表,select未处理的记录,处理记录,Update已处理标志,MoveNext,关闭表,断开,又再连接,打开。。。。
有没有高效的、比较标准的解决办法?
Top
7 楼zjcxc(邹建)回复于 2006-03-03 12:39:42 得分 0
用程序开发扩展存储过程, 触发器直接调用存储过程完成你需要的处理, 不用缓存和开另外的程序.
(当然, 如果你的处理逻辑直接在触发器中可以用sql语句实现, 则扩展存储过程也够了.)Top
8 楼cctime()回复于 2006-03-03 12:46:49 得分 0
扩展存储过程倒是个不错的选择,但这个需求应该算比较普遍的需求,如果对非sqlserver数据库系统该如何解决?应该相应有个比较普遍的解决办法吧?好像数据库对付这类实时性的应用都比较笨拙。Top
9 楼laker_tmj(laker)回复于 2006-03-03 22:46:30 得分 0
up learnTop




