wodeqq584958184 2018-05-03 07:02 采纳率: 77.8%
浏览 877
已采纳

关于SQL触发器数据筛选或者插入代码问题

现在公司有台机器,机器的状态有0,1,2,3,机器开启运行状态的时候是0,其他的 1、2和3对应的是其他状态,机器一开启就会自动有数据生成,生成的数据信息如(图1),
此图中的表原本是table1,但由于数据量大,暂时用table6替代。

图1

down机的时候,(也就是从0变为非0的时候,也就是0到1,或0到2,或者0到3这样的状态)table2会有数据记录产生,产生的数据记录其实就是错误代码。而每一次table1发生down机状态记录的时候,都会有个故障时间数据产生(即table1的非0数据记录的itime字段),故障了那么table2肯定会插入错误代码,但在这一个故障时间段直到下次机器变为0状态恢复运行时,错误代码有很多,例如下图是其中一个table6的down机过程:

图2

下图就是table2造成此次down机的所有错误代码

图3

由此可见,此次down机状态的时间是13点58分35秒,并且在13点59分22秒机器恢复运行(table2里runtime字段时间其实就是机器下次恢复运行变为0的时间),这2秒的时间里造成此次down机的错误代码有许多条,并且有些错误代码都在一个时间点上13点58分36秒,但有些不是,

现在我上司想要实现的效果就是,table6的每一次down机状态,我只要table2相对应此次down机状态的最先报错第一条代码,其他错误代码其他时间都不要,只要一条,并把此条错误代码数据记录的location字段和pointer字段还有itime值插入到table4中,

现在我建立了两个触发器,一个是table6的触发器,当table6有0变为非0再变为0时,触发这个触发器,把此次table6的down机的数据New-status和itimez字段传递到table4中,这一步已经实现了。
Table6的触发器
T1
但第二个触发器问题来了,
T2
第二个触发器是建立在table2的,因为要筛选出最新出来的错误代码,所以思路是:table6每次down机时,用table6的非0记录itime时间与table2出现最新一条错误代码记录的itime做对比,也就是(where itime>=@T6-itime order by itime desc),然后编写插入数据时候的判断,然后插入应该就可以了。但不知道为什么,进来的错误代码数据并没有筛选过,而是直接插入进table4去了,也就是说,往后出现的错误代码也会一直往table4插入进去。例如下图table4:
T2图
这里我在table2插入了两条,然后table4也插入了两条,按道理来说,应该只有一条啊。
请问我的table2触发器代码哪里出问题了,请大神帮我分析下,可以加我QQ详细描述:584958184

  • 写回答

4条回答 默认 最新

  • 默默悟问 2018-05-04 06:29
    关注

    第1行你可以合并到你的declare中

    declare @T2_count int
    
    select  @T2_count = count(*) from table2 where itime >= @T1_itime
    
    if (@new_Status <> 0 and @new_Status2=0 and @T2_count=1)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题