Хранимая процедура: условный код при изменении значения параметра от значения записи - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь создать хранимую процедуру 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 Ответ

2 голосов
/ 11 марта 2019

Вы можете использовать оператор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...