日期:2014-05-17  浏览次数:20582 次

奇怪的触发器问题 ,最大值计算不准确,如何再现问题?
使用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来定时运行,这样要写一个存储过程,应该说比触发器简单


------解决方案--------------------
--说实话,从头到尾没看懂
--再说句实话,应该是逻辑问题。不会是负载、性能导致计算失败