电表读数归零回滚SQL处理算法

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

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

--判断错误发生标示位

if @ErrorFlag=0

begin

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

set @[email protected] RTQty [email protected] LastQty;

end

else

begin

--错误标示位为1,

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

--计算当前值和前次值的增量[email protected]

set @IncreaseQty= RTQty - LastQty;

set @IncreaseQtyOlder= RTQty [email protected];

if  @IncreaseQtyOlder>=0

begin

set @[email protected]

end

end

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

begin

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

update Meter set LastQty [email protected], PrecedingQty [email protected] RTQty,ErrorFlag=0  where  [email protected]

--进行数据的其它计算

end

else

begin

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

update Meter set LastQty [email protected],ErrorFlag=1  where  [email protected]

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

end

时间: 2024-10-16 17:52:40

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

在Linux上升级、回滚和卸载SQL Server 2017

升级mssql-server包到最新版本 sudo yum update mssql-server 该命令下载最新包,并替换/opt/mssql/下的二进制文件.用户生成的数据库和系统数据库不会受该操作的影响. 回滚SQL Server到之前的某个版本 1. 识别你想降级到的SQL Server版本号.对应的版本号列表,查看这里. 2. 降级到之前的一个SQL Server版本.将<version_number>替换为步骤1中的版本号. sudo yum downgrade mssql-ser

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

    update.delete的条件写错甚至没有写,导致数据操作错误,需要恢复被误操作的行记录.这种情形,其实时有发生,可以选择用备份文件+binlog来恢复到测试环境,然后再做数据修复,但是这样其实需要耗费一定的时间跟资源. 其实,如果binlog format为row,binlog文件中是会详细记录每一个事务涉及到操作,并把每一个事务影响到行记录均存储起来,能否给予binlog 文件来反解析数据库的行记录变动情况呢? 业界已有不少相关的脚本及工具,但是随着MySQL版本的更新.binlo

PHP 事务回滚实例

#若已存在该表,就将其删除:否则创建新的表.DROP table IF EXISTS users;CREATE TABLE users( `user_name` varchar(5) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8; #若已存在该存储过程,就将其删除:否则创建新的存储过程DROP PROCEDURE IF EXISTS inserOrUpdate;CREATE PROCEDURE inserOrUpdate()BEGIN#----

mysql 误删除 使用binlog 进行回滚

mysql> select * from tet3;+----+-------------+| id | dd          |+----+-------------+|  1 | XX          ||  2 | YY          ||  3 | aaa         ||  4 | 5002301999X ||  5 | 0000000X    ||  6 | oi80        ||  7 | 887         ||  8 | 887         || 10

MySQL回滚工具binlog2sql使用介绍

参数介绍:参考官网地址:https://github.com/danfengcao/binlog2sql 直接从官网下载软件包,照着github上给的方法,虽然可以安装成功,但是执行如下命了报错,由于此工具源代码是是别人所写,目前暂时没找到是代码的哪个地方导致的语法错误.有知道的网友朋友可以友情提醒下,谢谢. [[email protected] binlog2sql]# python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dzi

程序中使用事务来管理sql语句的执行,执行失败时,可以达到回滚的要求。

1.设置使用事务的SQL执行语句 1 /// <summary> 2 /// 使用有事务的SQL语句 3 /// </summary> 4 /// <param name="sql"></param> 5 /// <param name="conn"></param> 6 /// <param name="tran"></param> 7 /// &l

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

事务是将一系列操作作为一个单元执行,要么成功,要么失败,回滚到最初状态.在事务处理术语中,事务要么提交,要么中止.若要提交事务,所有参与者都必须保证对数据的任何更改是永久的.不论系统崩溃或是发生其他无法预料的事件,更改都必须是持久的.只要有一个参与者无法做出此保证,整个事务就会失败.事务范围内的所有数据更改将回滚到特定设置点. Begin TRANSACTION 语句1; If @@error<>0 Goto error 语句2; If @@error<>0 Goto error

sql事务(Transaction)用法介绍及回滚实例_转

sql事务(Transaction)用法介绍及回滚实例 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性 当对多个表进行更新的时候,某条执行失败.为了保持数据的完整性,需要使用事务回滚. 显示设置事务 代码如下 begin try   www.2cto.com begin transaction insert into shi

SQL Server事务执行一半出错是否自动回滚整个事务 【转】

http://www.2cto.com/database/201308/234728.html SQL Server事务执行一半出错是否自动回滚整个事务 大家都知道SQL Server事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分.如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除. 所以是不是说事务出错一定会回滚整个事物呢? 先看几个个例子: --createtable create table testrollback(idi