我正在尝试使用新值更新37k记录,但在此之前,我正在尝试输入审计跟踪记录以记录以前的值。我遇到的是Update命令,即使在INSERT INTO命令之后,INSERT INTO命令的“Previous Value”显示新值。看来正在首先处理更新命令。
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
[编辑] 刚刚意识到我的SET @Deal_ID语句落在我的INSERT INTO之后。
虽然我之前已经意识到我需要在UPDATE之前发布INSERT INTO,但我没有移动SET语句,所有内容都是基于。
我的坏。
答案 0 :(得分:1)
不,问题在于你;
如果将@Deal_ID的更新移动到循环的开头,那么事情应该可以正常工作。
答案 1 :(得分:0)
我将使用update语句的OUTPUT子句。这样可以将旧值保存到表变量中,甚至可以直接保存到历史表中。您可以通过这种方式立即执行所有更新。