关于SQL SERVER触发器批量更新的问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 09:18:25
我写了个触发代码,当删除一行时触发某个事件,代码如下

create trigger del_触发器 on A表
for delete
as

begin

update B表 set 数量1=数量1+A.数量,数量2=数量2-A.数量
from B表 B inner join deleted A on b.id = a.id

end

当a表只删除一行数据,则可以正常触发事件,如果批量删除多行数据,它只能触发一次,也就是只更新最后一行。

并不能够批量更新,谁能帮我看一下吗?
a表
id________姓名________价格________data
2002______张三________100_________09-02-22
2002______张三________600_________09-02-12
2002______张三________150_________09-02-02
5566______李四________600_________09-02-22
5566______李四________180_________09-02-22
4202______王五________300_________09-02-22

B表
id________姓名______现金______曾经消费
2002______张三______1200______2860
5566______李四______2500______1200
4202______王五______6622______5233

就是当删除a表一条记录,同时返回金额到b表,现在的问题就是,如果批量删除的话,同一id下,只被返还一次,并不是每条都执行。

-------------------------
你表A中是不是有重复的ID号!! 把表A和表B的表结构列出来看下

y以下是测试数据,发现触发器是没有问题,请在数据库查询分析器检查是否有其他触发器或者规则在执行而影响到结果,如果仍然不明白原因请贴出表结构及数据导出发送给我(qq:157424212,E-mail:sunnyyang@highfashion.com.hk)
create table a
(num int,
id int)

create table b
(nun1 int,
num2 int,
id int)

select * from a

select * from b

insert into a
select 1,1
union
select 2,2
union
select 3,3
union
select 4,4
union
select 5,5

insert into b
select 10,10,1
union
select 10,10,2
union
select 10,10,3
union
select 10,10,4
union
select 10,10,5

create trigger del
on A
for delete
as
begin

update B set num1 = num1 + a.num, num2 = num2 - A.num
from B inner join deleted A on b.id = a.id

end

delete a where id = 1

delete a

select * from b

nu