在采集电表数据的时候,可以发现有些电表设备读数会发生回滚。这时候,如果单纯的累加计算用电量,就会出现负值。当然,这也许和电表的质量有关系。

“RTQty”(当前读到的读数)、“LastQty”(上次读数)、“PrecedingQty”(前次读数)、”ErrorFlag”(错误标示)、”IncreaseQty”(增量读数)、“IncreaseQtyOlder”(前次增量读数)。

--判断错误发生标示位

if @ErrorFlag=0

begin

--错误标示位为0,那么计算本次的增量值

set @IncreaseQty=@ RTQty -@ LastQty;

end

else

begin

--错误标示位为1,

--计算当前值和上次值的增量@IncreaseQty,

--计算当前值和前次值的增量----@IncreaseQtyOlder

set @IncreaseQty= RTQty - LastQty;

set @IncreaseQtyOlder= RTQty -@RTQtyOlder;

if  @IncreaseQtyOlder>=0

begin

set @IncreaseQty=@IncreaseQtyOlder

end

end

if @IncreaseQty>=0        ---如果增量不为负数

begin

--更新指定设备的数据点位,上次数值为当前值,更新前次数值为当前值,设置错误标示为0。

update Meter set LastQty =@RTQty, PrecedingQty =@ RTQty,ErrorFlag=0  where  MeterNo=@MeterNo

--进行数据的其它计算

end

else

begin

--更新指定设备的数据点位,上次数值为当前值,设置错误标示为1。

update Meter set LastQty =@RTQty,ErrorFlag=1  where  MeterNo=@MeterNo

--错误信息插入到警报表

end

电表读数归零回滚SQL处理算法的更多相关文章

  1. mysql基于binlog回滚工具_flashback(python版本)

        update.delete的条件写错甚至没有写,导致数据操作错误,需要恢复被误操作的行记录.这种情形,其实时有发生,可以选择用备份文件+binlog来恢复到测试环境,然后再做数据修复,但是这样 ...

  2. 【MySQL】通过Binary Log简单实现数据回滚(一)

    一.前言 对,没错,我又水了好一阵子,深刻反思寄几.前段时间,工作项目上出于对excel等批量操作可能出现误操作的问题,要求提供一个能够根据操作批次进行数据回滚的能力.在开发的过程中接触到了MySQL ...

  3. MySQL误操作后如何快速回滚(转)

    本文转自http://www.cnblogs.com/dfcao/p/6147970.html#undefined 感谢作者 基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,My ...

  4. Entity Framework 6事务回滚

    使用EF6你有新的事务处理可以使用类似于: 复制代码 using (var context = new PostEntityContainer()) { using (var dbcxtransact ...

  5. 解析binlog生成MySQL回滚脚本

    如果数据库误操作想恢复数据.可以试试下面这个脚本.前提是执行DML操作. #!/bin/env python #coding:utf-8 #Author: Hogan #Descript : 解析bi ...

  6. SQL 事务回滚

    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服 ...

  7. sql事务(Transaction)用法介绍及回滚实例

    sql事务(Transaction)用法介绍及回滚实例 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务, S ...

  8. 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)

    1   引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...

  9. DDL, DML不是所有SQL都是可以自动回滚的

    因为DDL没有事务性,所以DDL不能回滚. 要实现自动回滚.(begin,commit,rollback),则SQL语句中只能包括DML. 这样,自动化发布就会受限规范格式. 故而,一刀切的办法是,假 ...

随机推荐

  1. APR介绍

    http://blog.csdn.net/jmshl/article/details/6773731 APR分析-整体篇 由于部门所使用的底层库与Apache Server有着“一定的渊源”,所以总有 ...

  2. Oracle VM VirtualBox安裝Windows 2000失败

    问题: VirtualBox下安装Windows2000,设置网络后进入最后一步,复制组件……然后就是重启:再试还是重启!   解决: 在Oracle网站上查了一下资料:http://www.virt ...

  3. CFGym 101505I 题解

    一.题目链接 http://codeforces.com/gym/101505 二.题意 这题其实主要就是题意,理解题意后,就是水题了.我想了下,主要原因就是这几点: 1.题意太过英文化,很多句子不能 ...

  4. ThreadCachedInt

    folly/ThreadCachedInt.h High-performance atomic increment using thread caching. folly/ThreadCachedIn ...

  5. modelsim 的高效使用

    大概的思路: 1.往modelsim 添加仿真库. 2.将Verilog 文件,testbench文件提出.建好文件夹.比如uart仿真: uart_sim文件夹下:rtl文件夹,test_bench ...

  6. Oracle 性能调优之:使用 V$SQL_PLAN 视图查询内存中的执行计划

    V$SQL_PLAN视图提供了一种方法,可用于检查仍位于库高速缓存的游标的执行计划.此视图中的信息与 PLAN_TABLE 视图中的信息非常类似.但是,EXPLAIN PLAN 显示的是执行相应语句时 ...

  7. springboot 2.0 自定义redis自动装配

    首先创建maven项目 pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xm ...

  8. MySQL:Can't connect to mysql server 10038

    1.防火墙高级设置 2.入站规则,新建规则 3.选择端口 4.输入MySQL端口例如'3306' 5.允许连接 6.下一步 7.自定义规则名称和描述,完成之后重新连接即可.

  9. PyQt5系列教程(二)利用QtDesigner设计UI界面

    软硬件环境 OS X EI Capitan Python 3.5.1 PyQt 5.5.1 PyCharm 5.0.1 前言 在PyQt5系列教程的第一篇http://blog.csdn.net/dj ...

  10. leetcode103

    class Solution { public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector&l ...