注册 登录
编程论坛 SQL Server论坛

[求助]请教一个触发器的问题!

tjztjz 发布于 2006-11-08 19:54, 553 次点击
为表“OrderDetails”建立一个触发器,要求表“OrderDetails”订单数量确定后,必须修正Products表中的“库存量”,即现有库存量=原有库存量-订单中的数量, 并以“cfq2”为名保存
一开始做的是这样的:
create trigger cfq2 on dbo.OrderDetails
for insert,update
as
declare @num1 int, @num2 int, @id char(10)
select @num1=数量, @id=产品编号 from [inserted]
if exists(select * from [deleted])
begin
select @num2=数量 from [deleted]
set @num1=@num1-@num2
end
update dbo.Products
set 库存量=库存量-@num1
where 产品编号 = @id
go


但后来考虑到如果删除原有定单的话也应该修改Products表中的“库存量”,即现有库存量=原有库存量+订单中的数量 ,就又做了个删除触发器 :
create trigger cfq2 on dbo.OrderDetails
for delete
as
declare @num1 int
if exists(select 数量 from [deleted])
begin
select @num1=数量 from [deleted]
update Products
set 库存量=库存量 + num1
where Products.产品编号 in (select 产品编号 from [deleted])
end
go

现在的问题是想把这两个结合到一个触发器,应该怎样做呢?
希望知道的人帮忙指点一下!
先谢谢了!!!
3 回复
#2
tjztjz2006-11-11 22:02
终于解决了!!!

create trigger cfq2 on dbo.OrderDetails
for insert ,update,delete
as
declare @num1 int, @num2 int, @id char(10)
if exists(select 数量 from [deleted]) and not exists (select 数量 from [inserted])
begin
select @num1=数量 from [deleted]
update Products
set 库存量=库存量+@num1
where Products.产品编号 in (select 产品编号 from [deleted])
end
else
begin
select @num1=数量, @id=产品编号 from [inserted]
if exists(select * from [deleted])
begin
select @num2=数量 from [deleted]
set @num1=@num1-@num2
end
update dbo.Products
set 库存量=库存量-@num1
where 产品编号=@id
end
go

#3
tjztjz2006-11-11 22:03
但好像麻烦了,希望高手优化一下,先谢谢了!!!
#4
LouisXIV2006-11-12 00:01

分开效率更高 没有必要合并

1