存储过程:参数值从记录值更改时的条件代码

问题描述 投票:1回答:1

我想要做的是创建一个存储过程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的当前价格?

sql-server tsql ssms
1个回答
2
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.