现在公司有台机器,机器的状态有0,1,2,3,机器开启运行状态的时候是0,其他的 1、2和3对应的是其他状态,机器一开启就会自动有数据生成,生成的数据信息如(图1),
此图中的表原本是table1,但由于数据量大,暂时用table6替代。
down机的时候,(也就是从0变为非0的时候,也就是0到1,或0到2,或者0到3这样的状态)table2会有数据记录产生,产生的数据记录其实就是错误代码。而每一次table1发生down机状态记录的时候,都会有个故障时间数据产生(即table1的非0数据记录的itime字段),故障了那么table2肯定会插入错误代码,但在这一个故障时间段直到下次机器变为0状态恢复运行时,错误代码有很多,例如下图是其中一个table6的down机过程:
下图就是table2造成此次down机的所有错误代码
由此可见,此次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的触发器
但第二个触发器问题来了,
第二个触发器是建立在table2的,因为要筛选出最新出来的错误代码,所以思路是:table6每次down机时,用table6的非0记录itime时间与table2出现最新一条错误代码记录的itime做对比,也就是(where itime>=@T6-itime order by itime desc),然后编写插入数据时候的判断,然后插入应该就可以了。但不知道为什么,进来的错误代码数据并没有筛选过,而是直接插入进table4去了,也就是说,往后出现的错误代码也会一直往table4插入进去。例如下图table4:
这里我在table2插入了两条,然后table4也插入了两条,按道理来说,应该只有一条啊。
请问我的table2触发器代码哪里出问题了,请大神帮我分析下,可以加我QQ详细描述:584958184