2012-03-09 35 views
0

我试图用新值更新37k记录,但在此之前,我试图输入审计跟踪记录以记录以前的值。我碰到的是Update命令,即使在INSERT INTO命令之后,INSERT INTO命令的“Previous Value”也会显示新值。看起来,更新命令正在被首先处理。我的更新语句正在处理前之前所述INSERT INTO

WHILE @iLP <[email protected]_SD 
BEGIN 
-- History Change 
SET @PrevSettleDate=(SELECT SettleDate FROM Deal WHERE [email protected]_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 [email protected]_ID 


SET @[email protected] + 1 
END 

[编辑] 就意识到,我的SET @Deal_ID声明我的INSERT INTO后下降。

虽然我早先意识到我需要在我的UPDATE之前发布INSERT INTO,但我无法移动所有基于的SET语句。

我的不好。

回答

1

不,问题在于你;

  • 从Deal @Deal_ID读取@PrevSettleDate。
  • 将@PrevSettleDate写入Deal @Deal_ID的历史记录 - 目前为止这么好。
  • 正在更新@Deal_ID指向下一个交易 - 这是您出错的地方。
  • 正在更新下一个交易的日期。
  • 回到起点,从刚刚更新的交易中读取PrevSettleDate。
    ...

如果您将@Deal_ID的更新移动到循环的开始位置,则应该可以正常工作。