关于SQL server 2008 触发器 的问题

如题,我现在在table4里建立个触发器,想从MachineStatus表里读取插入时的数据,符合条件则
插入数据到table4,可为什么触发器好像并没有读取到MachineStatus表里插入的数据呢
图片说明

7个回答

没问题吧。。你怎么知道查询不到值?

你2个排序不一样,第一个没有orderby会按照添加的先后顺序,另外一个是按照itime,排序最好统一起来

showbo
支付宝加好友偷能量挖 触发器对象错了,应该是on machinestatus for insert,不是对table4
大约 2 年之前 回复
wodeqq584958184
wodeqq584958184 回复showbo: 可table4还是没有记录插入进去。。。。。。
大约 2 年之前 回复
wodeqq584958184
wodeqq584958184 回复showbo: 你看下我按照你的意思改了下触发器,截图在下面了
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 你原来的第一个select是取最老的一条,就是第一次插入的,如果你的itme是但如事件,那么第二个select就是第二条插入的了
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 回复wodeqq584958184: 上一条那就是最新2条了额,按照下面的改
大约 2 年之前 回复
wodeqq584958184
wodeqq584958184 恩....我只想实现当MachineStatus表每次有新纪录插入时,都与上一条记录做对比,取它们的Status字段下的值做对比,如果是上一条记录Status字段是0值,最新一条记录是非0值,则把记录插入到table4中,就是想实现这样的效果
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 回复wodeqq584958184: 你的第一个select永远只会取第一条插入的,你先搞清楚你要什么现实。如果是最新的2条,应该是降序排列。最新一条是select top 1 @id=id,@xxx=xxx.... from yourtable order by id desc。最新第二条是select top 1 @xxx=xxx.... from yourtable where id!=@id order by id desc
大约 2 年之前 回复
wodeqq584958184
wodeqq584958184 回复showbo: 意思是第一个select语句的from后面,再加个order by itime ASC吗?
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 回复wodeqq584958184: 排序你最好统一来
大约 2 年之前 回复
wodeqq584958184
wodeqq584958184 如果想要获取上一条记录,请问这条语句该怎么改??
大约 2 年之前 回复
wodeqq584958184
wodeqq584958184 我知道为什么table4没有记录插入了,可能是获取旧数据的select top 1 @oldStatus=status from MachineStatus where kid <>@minid,这里获取不到上一条记录
大约 2 年之前 回复

图片说明

插入的MachineStatus表的记录
图片说明

可table4一条记录都没有。。。。为什么会这样,难道是我触发器哪的逻辑还有错??
图片说明

wodeqq584958184
wodeqq584958184 好的 非常感谢
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 回复showbo: 定时任务参考这个:https://www.cnblogs.com/TJessica/p/6144479.html
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 而且你的insert也有问题。insert into...select 这种插入方法会插入选出的所有记录,你应该只需要插入指定的值什么的吧。插入最新的应该insert into table4(machine_status,machine_time)values(@newStatus,@itime)就行了
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 回复wodeqq584958184: 那自能定时任务执行你的那些代码了,问题是可能会导致插入多条相同的记录。你还得判断是否存在相同记录在插入talbe4了
大约 2 年之前 回复
wodeqq584958184
wodeqq584958184 有其他方法实现吗?总之不能在MachineStatus表里建任何东西,只能读取。。。。。。
大约 2 年之前 回复
wodeqq584958184
wodeqq584958184 。。。我原本以为能在table4建立的触发器,然后读取MachineStatus表里的数据来触发table4的触发器呢,可是MachineStatus这个表是在IT部里面,IT部的人不让我在他们建好的表里面建任何东西,怕会到时候出麻烦事情,说叫我去实现读取他们MachineStatus表里的数据,来完成效果。。。。 这可怎么办?又不能在MachineStatus表里建东西,table4建的触发器能读取到数据又触发不了。。。。这。。。。
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 。。。。。搞错,你应该是在machinestatus上建立触发器吧。。machinestatus添加了记录在通过触发器网table4添加记录。。你给table4加这个触发器,应该是有其他地方操作table4才会触发啊。。。⊙﹏⊙b汗。。
大约 2 年之前 回复
wodeqq584958184
wodeqq584958184 回复showbo: 真的奇怪了,最新的值是0,旧的记录值为1,没错啊,可为什么记录没有插入去table4呢??0.0
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 你新建一个查询,执行你的2个sql语句,然后print @oldStatus print @newStatus看输出什么内容,没看出什么问题。。
大约 2 年之前 回复

图片说明 这样就是可以的啊

wodeqq584958184
wodeqq584958184 所以我觉得是这里的问题,可是不知道该怎么改,怎么让他获取到上一条记录做对比。。。我必须要有与新纪录与上一条记录做对比这个条件。。。请问我该怎么改那条获取旧数据那条语句,望求助,谢谢你!
大约 2 年之前 回复
weixin_41171585
weixin_41171585 回复wodeqq584958184: 写法应该是没有问题的 你是那个条件应该有问题吧 两个语句查询的 第一个select 你怎么能保证是上一条记录呢
大约 2 年之前 回复
wodeqq584958184
wodeqq584958184 但是如果没有@变量的话,我就不能实现新数据与上一条数据,两条数据作比较的效果了,我是想实现插入的数据与上一条插入的数据做比较判断,如果 上一条数据的status字段为0,新插入的数据的status字段是非0值,则把这两条数据记录往table4插入
大约 2 年之前 回复

刚刚试验了下,如果把@变量取消,直接select top 1 status,itime,kid的话,是能查询到数据的,但为什么加上@变量就不行了呢,这样的话我就无法实现插入数据到table4的条件了

但是如果没有@变量的话,我就不能实现新数据与上一条数据,两条数据作比较的效果了,我是想实现插入的数据与上一条插入的数据做比较判断,如果
上一条数据的status字段为0,新插入的数据的status字段是非0值,则把这两条数据记录往table4插入

select top 1 @oldStatus = status from MachineStatus where kid <>@minid order by itime ASC 这句代码是旧数据记录赋值 接下来就是判断新纪录
与旧记录的比较,判断是否从0变为非0或者是非0变为0才执行

真的奇怪了,最新的值是0,旧的记录值为1,没错啊,可为什么记录没有插入去table4呢??0.0
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问