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

时间:2019-03-11 19:52:52

标签: sql-server tsql ssms

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

1 个答案:

答案 0 :(得分: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