这个触发器怎么写?急啊!

zy956 2006-08-12 01:43:47
表A
序号 姓名 级别 比例 消费
1 a 1 0.05 100
2 b 2 0.03 500
3 c 3 null 600

表B
序号 姓名 积分
1 a 100*0.05=5
2 b 500*0.03=3
3 c 0

怎样更新 表B. 积分 (按级别提积分更新)




...全文
740 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
jim97 2006-08-14
  • 打赏
  • 举报
回复
路过!
rikee19810706 2006-08-14
  • 打赏
  • 举报
回复
mark!
yishanhai 2006-08-13
  • 打赏
  • 举报
回复
支持,帮顶,学习中,分享中
killxtt 2006-08-12
  • 打赏
  • 举报
回复
似乎不难,进来观摩一下高手写语句的手法,呵呵
xyxfly 2006-08-12
  • 打赏
  • 举报
回复
^_^
  • 打赏
  • 举报
回复
MARK
love_qb 2006-08-12
  • 打赏
  • 举报
回复
这么多答案啊
hellowork 2006-08-12
  • 打赏
  • 举报
回复
抱歉,更正一下上面的INSERT触发器:
----插入时
create trigger trg_insert on tableA
for insert
as
UPDATE b set 积分 = 积分 + a.积分
FROM tableB b
INNER JOIN
(
select 姓名,isnull(sum(比例*消费),0) as 积分
from inserted group by 姓名
) a ON b.姓名 = a.姓名
GO
hellowork 2006-08-12
  • 打赏
  • 举报
回复
----插入时
create trigger trg_insert on tableA
for insert
as
UPDATE b set 积分 = 积分 + a.积分
FROM tableB b
INNER JOIN
(
select 姓名,isnull(sum(比例*消费),0) as 积分
from tableA x inner join inserted i on x.姓名 = i.姓名 group by 姓名
) a ON b.姓名 = a.姓名
GO

----更新时
create trigger trg_insert on tableA
for update
as
UPDATE b set 积分 = 积分 + a.积分
FROM tableB b
INNER JOIN
(
select i.姓名,isnull(sum(i.比例*i.消费),0) - isnull(sum(d.比例*d.消费),0) as 积分
from deleted d inner join inserted i on d.姓名 = i.姓名 group by i.姓名
) a ON b.姓名 = a.姓名
GO
Yang_ 2006-08-12
  • 打赏
  • 举报
回复
CREATE TRIGGER my_trig
ON 表A
FOR update
AS
IF UPDATE(消费) or UPDATE(比例)
update 表B set 积分=i.比例*i.消费
from 表B,insertd i
where 表B.姓名=i.姓名 --表B.序号=i.序号

go

xyxfly 2006-08-12
  • 打赏
  • 举报
回复
表A有重复记录,根据姓名来更新 ,条件是: 积分=sum( 消费)*比例??

你要的触发器是a更新时,b自动更新吧?

但是你有重复记录,比如你给的例子有两个A,你会更新哪个A呢? 根据什么来更新呢?
jaway 2006-08-12
  • 打赏
  • 举报
回复
CREATE TRIGGER my_trig
ON 表A
FOR update
AS
IF UPDATE(消费)
update 表B set 积分=insertd.比例*insertd.消费 from 表B,insertd where 表B.姓名=insertd.姓名
go

zy956 2006-08-12
  • 打赏
  • 举报
回复
表A有重复记录,根据姓名来更新 ,条件是: 积分=sum( 消费)*比例
明珠佩佩 2006-08-12
  • 打赏
  • 举报
回复
CREATE TRIGGER my_trig
ON 表A
FOR update
AS
IF UPDATE(消费) or UPDATE(比例)
update 表B set 积分=i.比例*i.消费
from 表B,insertd i
where 表B.姓名=i.姓名 --表B.序号=i.序号

go
十一月猪 2006-08-12
  • 打赏
  • 举报
回复
Updte B
Set 积分 = A.消费 * Isnull(A.比例,0)
From B , A
Where A.Id = B.Id
And B.姓名 = 姓名
hellowork 2006-08-12
  • 打赏
  • 举报
回复
这样试试:
UPDATE b set 积分 = a.积分
FROM tableB b
INNER JOIN (select 姓名,isnull(sum(比例*消费),0) as 积分 from tableA group by 姓名) a
ON b.姓名 = a.姓名
xyxfly 2006-08-12
  • 打赏
  • 举报
回复
上面只是一个插入触发器

因为
表A有重复记录?那你是根据什么来更新表
A记录呢?
xyxfly 2006-08-12
  • 打赏
  • 举报
回复
CREATE TRIGGER my_trig
ON A
FOR insert
AS
update B
set 积分=t.l
from B inner join
(select 姓名,sum( (case 比例 when NULL then 0 else 比例 end) * 消费) as l
from inserted
group by 姓名) as t
on B.姓名=t.姓名
go
pao1uo 2006-08-12
  • 打赏
  • 举报
回复
CREATE TRIGGER my_trig
ON 表A
FOR update
AS
IF UPDATE(消费) or UPDATE(比例)
update 表B set 积分=i.比例*i.消费
from 表B,insertd i
where 表B.序号=i.序号 --表B.姓名=i.姓名

go
xyxfly 2006-08-12
  • 打赏
  • 举报
回复
表A有重复记录?那你是根据什么来更新表
A记录呢?
加载更多回复(4)

34,590

社区成员

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

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