当前位置: 代码迷 >> Sql Server >> SQL Server 触发器,求诸位大牛帮帮忙
  详细解决方案

SQL Server 触发器,求诸位大牛帮帮忙

热度:69   发布时间:2016-04-24 09:00:25.0
SQL Server 触发器,求各位大牛帮帮忙!
本帖最后由 ChenFei__ 于 2015-06-12 13:40:02 编辑
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都没有使用条件语句,楼主如何知道得到了什么值?
------解决思路----------------------
引用:
USE [StuTuitionMan]
GO
/****** Object:  Trigger [dbo].[AutoTuition]    Script Date: 06/13/2015 13:07:55 ******/
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),@StuName nvarchar(4),@PaidAmount decimal(10,2),@InsertPaid decimal(10,2),@bol int=1;
select @id=ID,@InsertID=StuID,@StuName=StuName,@InsertPaid=PaymentAmount from inserted;
declare yb cursor for
select StuID from StuTuitionInfo;
open yb
fetch next from yb into @StuID
while(@@cursor_rows!=0)
begin
 if(@StuID=@InsertID)
begin
 select @StuID=StuID,@PaidAmount=PaidAmount from StuTuitionInfo;
 set @InsertPaid+=@PaidAmount;
 update StuTuitionInfo set PaidAmount=@InsertPaid;
 set @bol=0;
end
 else
 fetch next from yb into @StuID
end
close yb;
deallocate yb;
if(@bol=1)
insert into StuTuitionInfo(ID,StuID,StuName,PaidAmount) values(@id,@InsertID,@StuName,@InsertPaid);
自动插入一条记录没问题,就是更新时会提示算术溢出。我觉得应该是游标写错了,学生娃儿,大牛们体谅下。


这个就自己慢慢debug吧,祝好运
------解决思路----------------------
--这个表(StuTuitionInfo)只有一条记录??怎么能这样写,这里返回的永远是表中的第一条记录,(@StuID=@InsertID)肯定永远不相等
select @StuID=StuID,@PaidAmount=PaidAmount,@TuitionName=StuName from StuTuitionInfo;
  相关解决方案