有两个表:A和B
A中列有name,pv,lo,ll,hi,hh
B表结构 name,pv,type
要求一触发器:当表A 的pv列更新时,
若pv>hh,将type设为“高高限”
若hi<pv<hh,将type设为“高限”
若pv<ll,将type设为“低低限”
若ll<pv<lo,将type设为“低限”
并将对应的name,pv值写入B表若用触发器调用一个完成此功能的存储过程更新速度非常慢
因此请教这个触发器怎么写
或者不用触发器有没有更好的提高更新速度的办法
我编程用的是vc
A中列有name,pv,lo,ll,hi,hh
B表结构 name,pv,type
要求一触发器:当表A 的pv列更新时,
若pv>hh,将type设为“高高限”
若hi<pv<hh,将type设为“高限”
若pv<ll,将type设为“低低限”
若ll<pv<lo,将type设为“低限”
并将对应的name,pv值写入B表若用触发器调用一个完成此功能的存储过程更新速度非常慢
因此请教这个触发器怎么写
或者不用触发器有没有更好的提高更新速度的办法
我编程用的是vc
解决方案 »
- 提取数据问题
- 如何看Function被哪些其他的Function或者Procedure调用了.
- 简单的sql查询,希望能人帮忙
- 求个SQL查询语句,谢谢
- [求助]请问定时备份数据库的SQL脚本怎么写?
- 请教:为表中的一列加入该函数出错,请问错在哪里:IIf((left(订单编号,2) = 'dz'),(([加工费] + [制造费] + [研制费] + [调试工资] + [
- SQl中有没有表示行头和行尾的字符?
- 能不能介绍点sql server 和XML整合应用的电子书籍
- sql server中的datetime数据类型可以存象2004-04-16 15:44:34的时间吗?
- 问:怎样连接两个查询?
- 请教一个分类统计的问题,
- ★谢谢野蛮和天道,又给你门送分来拉
for update
as
if update(pv)
begin
update A set type=(case when pv>hh then '高高限'
case when hi<pv<hh then '高限'
case when pv<ll then '低低限'
case when ll<pv<lo then 低限'
end) from inserted
update B set B.name=A.name AND B.pv=A.pv from A,inserted
end
for update
as
if (COLUMNS_UPDATED() = 2)
begin
insert into b
select name , pv ,
CASE pv
WHEN pv>hh THEN '高高限'
WHEN hi<pv<hh THEN '高限'
WHEN pv<ll THEN '低低限'
WHEN ll<pv<lo THEN '低限'
END
from a
end
)
for update
as
if (COLUMNS_UPDATED() = 2)
begin
insert into b
select name , pv ,
CASE pv
WHEN pv>hh THEN '高高限'
WHEN hi<pv<hh THEN '高限'
WHEN pv<ll THEN '低低限'
WHEN ll<pv<lo THEN '低限'
END
from inserted
end
)
CREATE TRIGGER Tr_BUpd ON dbo.[A]
FOR UPDATE
AS
if update(pv)
begin
update B
set type=(case when b.pv>b.hh then '高高限' when b.pv>b.hi and b.pv<=b.hh then '高限' when b.pv>b.ll and b.pv<=b.lo then '低限' else '低低限' end)
from B a ,inserted b where a.name=b.name
end
CREATE TRIGGER Tr_BUpd ON dbo.[A]
FOR UPDATE
AS
if update(pv)
begin
update a
set type=(case
when b.pv>b.hh then '高高限'
when b.pv>b.hi and b.pv<=b.hh then '高限'
when b.pv>b.ll and b.pv<=b.lo then '低限'
else '低低限' end)
from B a ,inserted b where a.name=b.name
end
ON A
FOR INSERT,UPDATE
ASUPDATE B
SET TYPE=CASE WHEN I.pv>I.hh THEN '高高限'
WHEN I.pv<I.hh AND I.pv>I.HI THEN '高限'
WHEN I.pv<I.LL THEN '低低限'
WHEN I.pv>I.LL AND I.pv<I.LO THEN '低限'
ELSE B.TYPE
END
FROM B,INSERTED I
WHERE B.NAME=I.NAME
AND B.PV=I.PVINSERT B
SELECT NAME,PV,TYPE=CASE WHEN I.pv>I.hh THEN '高高限'
WHEN I.pv<I.hh AND I.pv>I.HI THEN '高限'
WHEN I.pv<I.LL THEN '低低限'
WHEN I.pv>I.LL AND I.pv<I.LO THEN '低限'
ELSE '不知'
END
FROM INSERTED I
WHERE NOT EXISTS (
SELECT 1 FROM B
WHERE B.NAME=I.NAME
AND B.PV=I.PV
)GO--说明
--1、你的逻辑有漏洞,lo<pv<hi没说明,都用><会楼掉有些数据点
--2、我理解你的B表以(name,pv)为主键
CREATE TRIGGER Tr_BUpd ON dbo.[A]
FOR UPDATE
AS
if update(pv)
begin
delete from B where name in (select name from inserted)
insert into B select name,pv ,type=(case when pv>hh then '高高限' when pv>hi and pv<=hh then '高限' when pv>ll and pv<=lo then '低限' else '低低限' end) from inserted
end
哈哈,把貓大哥的方法改一改,不知對不對
补充一下:hh,hi,lo,ll分别表示上下限值,name,pv不是表B的主键,
B中的name可以有重复值,我要求的只是在表A的pv值超限的情况下,将超限记录导入表B