在“病人缴费表”上建立insert触发器,当向“病人缴费表”插入一行是,要求:
(1)、如果该病人是第一次缴费,则“剩余金额”为“缴费金额”
(2)、如果不是第一次缴费,则新的“剩余金额”为上一次的”剩余金额+这一次“缴费金额”。同时,上一次“剩余金额”设置为NULL--病人缴费表
create table 病人缴费表
(
  缴费编号 varchar(16) not null constraint PK_GetMoney primary key,
  病人编号  char(9) not null,
  缴费日期  datetime  not null,
  缴费金额  money null,
  剩余金额  money null--注:每插入一行缴费明细,就要统计一下余额。同时,该人的上一条余额设置为null  
)--检测数据:
--第一次缴费:
delete 病人缴费表 where 病人编号='Pat0007'
insert 病人缴费表 values('GetMon0050','Pat0007','2009-07-30',50,null)--非第一次缴费:
insert 病人缴费表 values('GetMon0051','Pat0007','2010-12-30',50,null)
这是我自己写的:alter trigger c on 病人缴费表
for insert 
as begin 
declare @t1 money
declare @t2 money
declare @inscount int
select @inscount=count(*) from inserted 
   if @inscount>0 
      begin
if not exists (select * from 病人缴费表 where 病人编号=(select 病人编号 from inserted))
 begin
 select @t1=缴费金额 from inserted
select @t2=剩余金额 from 病人缴费表 where 病人编号=(select 病人编号 from inserted)
 set @t2=@t1 

 end
if exists (select * from 病人缴费表 where 病人编号=(select 病人编号 from inserted))
 begin
 select @t1=剩余金额 from 病人缴费表 where 病人编号=(select 病人编号 from inserted)
 select @t2=缴费金额 from inserted
 set @t1=@t2+@t1
  

 end
end
end
不知道哪里错了总之对插入的数据没有影响,还有就是题目要求的上一次“剩余金额”设置为NULL不知如何写,知道论坛高手多,谁来教教我呀

解决方案 »

  1.   


    --不存在的判断
     if not exists (select * from 病人缴费表,inserted where 病人缴费表.病人编号= inserted.病人编号 and 病人缴费表.缴费编号<> inserted.缴费编号)--不存在的操作
    select @t1=缴费金额 from inserted
    update 病人缴费表 
    set 剩余金额=@t1 
    from inserted 
    where 病人缴费表.病人编号= inserted.病人编号--存在的操作
    select @t1=sum(病人缴费表.剩余金额) from 病人缴费表,inserted where 病人缴费表.病人编号= inserted.病人编号 group by 病人缴费表.病人编号
    select @t2=缴费金额 from inserted
    update  病人缴费表 set 剩余金额=null from inserted where 病人缴费表.病人编号= inserted.病人编号
    update 病人缴费表 set 剩余金额=@t1+@t2 from inserted where 病人缴费表.病人编号= inserted.病人编号 and 病人缴费表.缴费编号= inserted.缴费编号