关于SQL server触发器代码问题,不知道哪里出问题了 40C

说明:我现在三个表的关系是,table1插入的是机器状态(0为开机运行状态,非0为down机状态,也就是机器遇到报错了,有错误代码产生,引起机器故障停止)

table2是专门插入造成每次down机的错误代码,

table4是插入每次down机的时候,经过触发器筛选,将造成此次down机的最先报错的错误代码记录插入到table4中,筛选的条件是离table1中非0记录时间最近的错误代码。

我现在的触发器

图1

测试过程
(1) 先在table1中插入一条开机状态记录(状态为0的记录)
图2
(2) 在插入一条down机状态记录(状态为非0)
图3
(3) 可见table4的效果
图4
(4) 既然down机那就插入一条错误代码(table2暂时用tale2_1代替。)
图5

(5)插入后,再插入一条状态为0的记录,意味着机器恢复运行。
图6

(6)再去table4查看结果,发现刚刚插入table2-1表的数据按思路应该table4中会有错误代码的各个字段的的值,但我发现table2里面的错误代码location,pointer,itime等等,并没有把值传递给table4 的down机记录下。而是出现了一条空行记录。

图7

我想要的效果有了一半,但那条空行记录应该是location = 'sta010' pointer='10000 'ng-time = 'getdate()' 问题是出在哪里呢??请SQL 大神、专家帮我看看~~~
可以加Q详细说明:584958184

5个回答

逻辑错了。。。你记录的那个时间已经是修改时间了,然后你再去查询tb2表比这个时间大的。。。那不可能啊,本身触发器是线程安全的。。。。
tb2是比tb4执行慢的,这样操作你永远查不出数据的

mango_love
mango_love 回复wodeqq584958184: 明白了,那这样你是不是可以根据tb2表的时间倒序然后top 1。。。你试试吧,我等下加你
接近 2 年之前 回复
wodeqq584958184
wodeqq584958184 回复mango_love: 你可以加下我QQ 或许能更好详谈下。。。。。。
接近 2 年之前 回复
wodeqq584958184
wodeqq584958184 回复mango_love:我不知道怎么处理table2的数据,我还只是个实习生,到时候table2的数据是机器自动往表里面插入数据的,而且每次发生down机状态直到下次恢复为0状态这个过程中,会产生很多条错误代码,有些还是同一个时间点出现的,所以我上司现在要我筛选出离此次down机table1非0记录的时间与table2错误代码时间做比较,离得最近就筛选出来到table4中
接近 2 年之前 回复
mango_love
mango_love 回复wodeqq584958184: tb2保存的是down机错误代码,tb4是保存down机最新的错误代码,我建议你去tb2里面处理这个
接近 2 年之前 回复
wodeqq584958184
wodeqq584958184 是吗。。。那你觉得要怎么改。。。。
接近 2 年之前 回复

sp_helptext '触发器名' select text from syscomments where ID= object_ID(N'触发器名')

sp_helptext '触发器名'或select text from syscomments where ID= object_ID(N'触发器名')

wodeqq584958184
wodeqq584958184 在触发器哪里插入这条代码、
接近 2 年之前 回复
wodeqq584958184
wodeqq584958184 这一条是做什么用的??
接近 2 年之前 回复

语句错了 insert into 表名(列名) valuse (数据
)

wodeqq584958184
wodeqq584958184 我这个是批量录入,是可以的,表中的确有数据生成
接近 2 年之前 回复

触发器是线性操作的,建议你写两个触发器,第一个触发第二个,第二个触发第三个,系统会自动判断他们之间的完成情况

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