我想要做的是创建一个存储过程UpdatePrice
,它采取两个参数(@PartId, @Price)
并检查给定的价格是否等于当前价格,如果没有,那么没有任何反应。
如果它不同,那么我在一个名为PriceHistory
的表中插入一个新行,详细说明这些更改。我遇到麻烦的部分是检查等效性。
我倾向于说
begin transaction PriceUpdate
if @Price = Price
begin
--
end
else begin
insert into PriceHistory(@PartId, ChangeDate, PreviousPrice, NewPrice)
select @PartId, GetDate(), p.Price, @Price
from Part p
where PartID = @PartId
end
然而问题是Price
显然不是我可以放在那里的有效东西。那么我将如何获得给定的PartId
的当前价格?
您可以使用exists
语句来检查记录是否存在具有预期条件,例如价格相同或不同,然后执行条件代码。
begin tran
if exists (select 1 from dbo.Part where PartId = @PartId and coalesce(Price,0) <> coalesce(@Price,0)) begin
-- Further statements here for when price is equal
end else begin
-- Further statements here for when price is not equal
insert into PriceHistory(@PartId, ChangeDate, PreviousPrice, NewPrice)
select @PartId, GetDate(), p.Price, @Price
from Part p
where PartID = @PartId
end
commit