读书人

一条简单的insert触发如何写不好

发布时间: 2012-01-23 21:57:28 作者: rapoo

一条简单的insert触发怎么写不好?
CREATE TRIGGER ins_sales ON [dbo].[sales]
FOR INSERT
AS
update products set cpsl = cpsl + (select sum(inserted.xssl)
from inserted where products.cpid = inserted.cpid )

update products set cpsl = cpsl + (select sum(inserted.xssl)
from inserted group by cpid having products.cpid = inserted.cpid )

意思是在sales表中添一条记录,相应的把xssl累加到products表的cpsl中
上面两条都不行,应该怎么写?

[解决办法]
CREATE TRIGGER ins_sales ON [dbo].[sales]
FOR INSERT
AS
BEGIN
update p
set
cpsl = isnull(p.cpsl,0)+i.xssl
from
products p,inserted i
where
p.cpid=i.cpid

insert into products(cpid,cpsl)
select cpid,xssl from inserted
where
not exists(select 1 from products where cpid=inserted.cpid)
END
GO
[解决办法]
CREATE TRIGGER ins_sales ON [dbo].[sales]
FOR INSERT
AS
update products set cpsl = t.xssl
from procucts ,
(select cpid,sum(inserted.xssl) xssl from sales group by cpid) t
where products.cpid = t.cpid
go

读书人网 >SQL Server

热点推荐