奇怪的触发器问题 ,最大值计算不准确,如何再现问题?
使用Sqlserver2000 数据库 程序不断的插入数据到一个表中
m_Realdata表,表结构如下:
测点编号 实时值 状态 保存时间
nodeId(int) value(varchar(50)) status (int) datatime (datetime)
此表不保存数据 而将数据保存在相同结构的月表中 格式如下
101 0.03 0 2013-8-12 16:38:12
102 0.83 1 2013-8-12 16:39:32
... ... ... ......
这个表建了触发器。
CREATE TRIGGER tgReal_Value ON dbo.M_RealValue
instead of INSERT
As
begin
----任务1:将数据插入到密采数据表中 表结构和m_realvalue结构完全一致
----任务2:5分钟统计一次 得到每个测点的最大值和最小值,如 16:35-16:40时间段
----任务3: 将报警状态 状态为1的 记录当,状态恢复到0后 插入到报警表中去。
end
--问题是:
在实际应用过程中,发现5分钟内统计的最大值有时候不对,比如有一个值很大,但是查询这个时间段的
5分钟记录找不到!,而平时都有,
我用游标将月表中的数据 回滚的办法 却可以产生,触发器计算正确!!!
是什么原因导致的呢?
请各位高人 判断一下 是触发器写的有问题吗?还是由于负载、性能导致计算失败?
我查询了一下记录 发现丢失的最大值恰恰是状态为报警状态的记录,但报警表、实时月表
中都有记录。
[解决办法]
每5分钟统计一次,用触发器不合适,触发器是有数据新增、修改、删除的时候才做。
所以应该用JOB来定时运行,这样要写一个存储过程,应该说比触发器简单
[解决办法]
--说实话,从头到尾没看懂
--再说句实话,应该是逻辑问题。不会是负载、性能导致计算失败
[解决办法]
时间比较的时候,不要忽略毫秒值,请再检查一下吧。
[解决办法]
5分钟的统计结果保存在哪?
触发器中怎么判断5分钟到了,该统计了?
估计是程序的逻辑问题..