Мое заявление об обновлении обрабатывается перед ранее указанным INSERT INTO - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь обновить 37k записей новым значением, но до этого я пытаюсь ввести запись журнала аудита, чтобы записать предыдущее значение.Я сталкиваюсь с тем, что команда Update, хотя и идет после команды INSERT INTO, в «Предыдущем значении» команды INSERT INTO отображается новое значение.Похоже, что команда Update обрабатывается первой.

WHILE @iLP <=@cntDeal_SD
BEGIN
-- History Change
SET @PrevSettleDate=(SELECT SettleDate FROM Deal WHERE DealID=@Deal_ID)

INSERT INTO History
    (ItemKey,LoginID,TimeStamp,HowChanged,FieldChanged,PreviousValue,NewValue,Comment,Created)
    VALUES ('CDeal' + CAST(@Deal_ID AS varchar(10)),1,GETDATE(), 'M','SettleDate', ISNULL(@PrevSettleDate,'NULL'), '3/02/2012', 'TSR5691', 0)


-- Record Change 
SET @Deal_ID = (SELECT DealID FROM @tblDeal_SD WHERE Row = @iLP)
UPDATE Deal SET SettleDate = '3/02/2012' WHERE DealID=@Deal_ID


SET @iLP=@iLP + 1
END

[Edit] Только что понял, что мой оператор SET @Deal_ID падает после моего INSERT INTO.

ХотяРанее я осознал, что мне нужно опубликовать INSERT INTO до моего ОБНОВЛЕНИЯ. Я не смог переместить утверждение SET, на котором все основано.

Мой плохой.

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Нет, проблема в том, что вы;

  • Чтение @PrevSettleDate из сделки @Deal_ID.
  • Запись @PrevSettleDate в History для сделки @Deal_ID - пока все хорошо.
  • Обновление @Deal_ID так, чтобы оно указывало на next Deal - здесь вы ошибаетесь
  • Обновление следующей даты сделки.
  • Возвращаясь к началу, читая PrevSettleDate из сделки, которую вы только что обновили....

Если вы переместите обновление @Deal_ID в начало цикла, все должно работать.

0 голосов
/ 10 марта 2012

Я бы использовал предложение OUTPUT оператора update.Это позволит вам сохранить старые значения в табличной переменной или даже непосредственно в таблице истории.Вы можете сделать все обновления одновременно таким образом.

http://msdn.microsoft.com/en-us/library/ms177564.aspx

...