触发器能实现吗???
TABLE A(ID INT, TOTALNUM INT)
TABLE B(ID INT, NAME CHAR(10), NUM INT)
TABLE A 的内容
1, 0
2, 0
3, 0
4, 0
现在的要求是如何写触发器,使得当TABLE B更新或新增时候,能够将B中NUM累加到TABLE A的相应记录中,用ID关联。
TABLE B单个记录的更新或新增很容易,问题是当有多个记录的时候怎么做?
注:每次改动TABLE B中的记录的ID都是相同的
问题点数:100、回复次数:4Top
1 楼Yang_(扬帆破浪)回复于 2002-09-09 21:54:32 得分 100
能:
create trigger tr_b_All
on b
for insert,update,delete
as
declare @A TABLE ID INT, TOTALNUM INT)
declare @ASum TABLE ID INT, TOTALNUM INT)
insert @a
select id,NUM
from inserted
union all
select id,-NUM
from deleted
insert @aSum
select id,sum(TOTALNUM)
from @a
group by id
update a
set TOTALNUM=a.TOTALNUM+t.TOTALNUM
from a,@ASum t
where a.id=t.id
insert a(id,TOTALNUM)
select id,TOTALNUM
from @ASum t
where not exists (
select 1 from a
where a.id=t.id
)
go
Top
2 楼Yang_(扬帆破浪)回复于 2002-09-09 21:55:16 得分 0
每次改动TABLE B中的记录的ID相同和不相同都是可以的。
Top
3 楼iamxia()回复于 2002-09-10 02:03:19 得分 0
?
我在UPDATE中不能用TABLE变量?提示必须先声明。奇怪中...Top
4 楼Yang_(扬帆破浪)回复于 2002-09-10 08:28:37 得分 0
写少了扩号!
create trigger tr_b_All
on b
for insert,update,delete
as
declare @A TABLE (ID INT, TOTALNUM INT)
declare @ASum TABLE (ID INT, TOTALNUM INT)
insert @a
select id,NUM
from inserted
union all
select id,-NUM
from deleted
insert @aSum
select id,sum(TOTALNUM)
from @a
group by id
update a
set TOTALNUM=a.TOTALNUM+t.TOTALNUM
from a,@ASum t
where a.id=t.id
insert a(id,TOTALNUM)
select id,TOTALNUM
from @ASum t
where not exists (
select 1 from a
where a.id=t.id
)
go
Top




