关于UPDATE的问题(update之前利用触发器判断一下数据,是否需要UPDATE)

zltion 2006-11-23 11:06:20
从上位机系统中采集大量实时数据点,需要短时间(10秒)的不断更新(老板很扣,不想买实时数据库),想把数据不断更新到数据库中。

其实绝大部分的数据在一定时间内都很少有改变的,如果每个点都update一下,效率太低了,就想能不能通过触发器,在update之前,检查一下这个测点的数据,是否改变了,如果改变了,就继续update,如果没改变,则中止这个点数据的更新。

表结构如下:

监测点数据表(监测点ID,监测点名称,监测点值,变比)

希望触发器 在UPDATE 监测点数据之前,判断UPDATE的新值是否与旧值相同,如果没有变化,则中止这个测点的数据UPDATE,否则更新这个测点的数据。

请问各位高手,可不可以实现?
...全文
701 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljs1519 2006-11-25
  • 打赏
  • 举报
回复
zltion:明白了,前面我的理解有问题。
zltion 2006-11-24
  • 打赏
  • 举报
回复
回 :ljs1519() ( ) 信誉:100 Blog

我只要保存实时的监测点的数据,方便集成在MIS中,让办公室人员查看实时的情况。不需要做趋势分析,所以没必要时间字段。
zltion 2006-11-24
  • 打赏
  • 举报
回复
在Oracle中,触发器是有UPDATE之前,UPDATE之后,插入之前、插入之后这样的写法。但sql server我不太清楚。
至于触发器内部,是否有数据的自我判断功能,还真不清楚,这可能要了解得更深入才行,比喻触发器的工作机制。

我现在还没有测试,明天向大家报告效果。
marco08 2006-11-24
  • 打赏
  • 举报
回复
学习
gahade 2006-11-24
  • 打赏
  • 举报
回复
其实只要有for update触发器就行,没有更新是不会触发的
-----------------------------------------------------
是这样的吗?看下面的测试

drop table tabletest

create table tabletest(id int)

insert into tabletest(id)
select 10

create trigger tu_tabletest on tabletest
for update
as
print '触发过'

update tabletest
set id = 10
where id = 10
--这条语句会打印出'触发过'

不知道分析得对不对,请见谅!
ljs1519 2006-11-24
  • 打赏
  • 举报
回复
支持yesyesyes的说法,只要FOR update就可以了。
另外我觉得数据库结构能不能改一下:增加一个监测时间,记下每次修改的时间。这样只要针对有最新检测时间的记录进行处理,系统的运行效率比较高,而且写程序也简单。
yesyesyes 2006-11-24
  • 打赏
  • 举报
回复
其实只要有for update触发器就行,没有更新是不会触发的
明珠佩佩 2006-11-24
  • 打赏
  • 举报
回复
学习学习!~~~
caixia615 2006-11-24
  • 打赏
  • 举报
回复
UP
yesyesyes 2006-11-24
  • 打赏
  • 举报
回复
update tabletest
set id = 10
where id = 10
=======
这就是更新啊
gahade 2006-11-23
  • 打赏
  • 举报
回复
create trigger ut_监测点数据表 on 监测点数据表
instead of update
as
if exists(select * from inserted i,deleted d where i.监测点ID=d.监测点ID and isnull(i.监测点值,0)<>isnull(d.监测点值,0))
begin
update 监测点数据表
set 监测点数据表.监测点值=i.监测点值
from 监测点数据表,inserted i,deleted d
where 监测点数据表.监测点ID=i.监测点ID and i.监测点ID=d.监测点ID and isnull(i.监测点值,0)<>isnull(d.监测点值,0)
end

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧