日期:2014-05-18  浏览次数:20369 次

触发器的问题,请前辈指点!!
教材库存(表)
教材编号   教材名称     教材数量
a001             软件工程       100

教材发放(表)
学号             姓名  班级     教材编号       教材名称           是否领取
20070001     张三         1班       a001               软件工程           否
20070002     李四         2班     a001               软件工程           否
20070003     王五         2班       a001               软件工程           否

目的:想实时显示 "教材库存 "中的教材数量。也就是说     教材发放 表中,把 是否领取 把是改为否,把否改为是  在教材库存中的教材数量就相应的加1或减1。

问题:我用触发器来解决这问题,单个修改某条记录的 是否领取 字段可以实现,但把某一个班 的是否领取字段 改为 是(update   教材发放   set   是否领取= '是 '   where   班级= '2班 '),就不行了。  


这问题怎么解决,请前辈指点,小弟不胜感激!!

------解决方案--------------------
create trigger tr_test
on 教材发放表
for update
as
set nocount on
if update(是否领取)
begin
update m set m.教材数量 = m.教材数量+n.数量
from 教材库存表 m,
(select a.教材编号,数量=sum(case when a.是否领取= '否 ' and b.是否领取= '是 ' then 1 when a.是否领取= '是 ' and b.是否领取= '否 ' then -1 else 0 end) from deleted a join inserted b on a.学号=b.学号 group by 教材编号) n
where m.教材编号=n.教材编号
end
set nocount off
go