USE [StuTuitionMan]
GO
/****** Object: Trigger [dbo].[AutoTuition] Script Date: 06/11/2015 23:22:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[AutoTuition]
on [dbo].[SutPayInfo]
for insert
as
declare @id int,@StuID char(20),@InsertID char(20),@TuitionName nvarchar(4),@StuName nvarchar(4),@PaidAmount float,@InsertPaid float;
select @StuID=StuID,@PaidAmount=PaidAmount,@TuitionName=StuName from StuTuitionInfo;
select distinct @id=ID,@InsertID=StuID,@StuName=StuName,@InsertPaid=PaymentAmount from inserted;
if(@StuID=@InsertID)//值是相同的字符串,这里永远是不等于
begin
set @InsertPaid+=@PaidAmount;
update StuTuitionInfo set PaidAmount=@InsertPaid;
end
else
begin
insert into StuTuitionInfo(ID,StuID,StuName,PaidAmount) values(@id,@InsertID,@StuName,@InsertPaid);
end
------解决思路----------------------
你的问题是。。。。
if(@StuID=@InsertID)//值是相同的字符串,这里永远是不等于 ???
可以print看看值是多少 是不是没有初始化变量
------解决思路----------------------
你第一个select ……from StuTuitionInfo中没有where条件限制,会取最后一行数据。
你应该先去inserted中数据,@id设置好,再根据@id选取stutuitioninfo中的数据,惊醒后续操作
我建议使用merge命令
------解决思路----------------------
查表StuTuitionInfo都没有使用条件语句,楼主如何知道得到了什么值?
------解决思路----------------------
这个就自己慢慢debug吧,祝好运
------解决思路----------------------
--这个表(StuTuitionInfo)只有一条记录??怎么能这样写,这里返回的永远是表中的第一条记录,(@StuID=@InsertID)肯定永远不相等
select @StuID=StuID,@PaidAmount=PaidAmount,@TuitionName=StuName from StuTuitionInfo;