在“病人缴费表”上建立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)、如果该病人是第一次缴费,则“剩余金额”为“缴费金额”
(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不知如何写,知道论坛高手多,谁来教教我呀
--不存在的判断
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.缴费编号