SQL触发器执行问题?

来源:百度知道 编辑:UC知道 时间:2024/09/22 18:23:20
我的触发器:
alter trigger tri_insert_staTable
on pay
for insert
as
begin
declare @paymoney money --(自动更新)
set @paymoney=(select sum(payMoney) from pay where payDate=
(select payDate from inserted))
update [statistics] set staPayMoney=@paymoney where staDate=
(select payDate from inserted)
end

insert into pay values('07 31 2008','赛公桥菜市场','黄瓜',0.56,'贵')

insert into pay values('07 31 2008','赛公桥菜市场','西瓜',5.00,'相当贵')

执行以上插入操作后:

select * from [statistics] where staDate='07 31 2008'

得到的结果却是:
staID staDate staPreMoney staPayMoney staRemark
----------- ---------- --------------------- --------------------- ------------------------------------------------------------------
55 07 31 2008 15.00 5.00 NULL

(1 行受影

我根据你的描述建了表和触发器,进行了测试,并没有发现你所说的问题
在插入完数据后,[statistics]表的staPayMoney确实是5.56

只是当进行批量插入时会发生错误而已,但是你目前的情况都是单条记录插入,应该是没有问题的

你再更新一次触发器试试

触发器里把update...set...改成 set staPayMoney = staPayMoney+@paymoney

所以我想让你在触发器中加一句查询,每次insert之后就显示一下[statistics]中的记录。
另外,[pay]表中的pay字段的类型你在却认一下,是不是被你该成int了。
----------------------------------------
在触发器的最后加一句:
select * from [statistics] where staDate=(select payDate from inserted)

然后到查询分析器中运行insert语句,看看结果

从程序上来看逻辑有问题

set @paymoney=(select sum(payMoney) from pay where payDate=
(select payDate from inserted))
这里是得到刚刚插入的总和,当然是以5.00的那一条为准,如果你换一下插入顺序的话,那应该是0.56

解决方法不能这样

应该是
set @paymoney=(select sum(payMoney) from pay