簡體   English   中英

我的Update語句在先前聲明的INSERT INTO之前正在處理

[英]My Update statement is being processed before a previously stated INSERT INTO

我正在嘗試使用新值更新37k記錄,但在此之前,我試圖輸入“審計追蹤”記錄以記錄先前的值。 我遇到的是Update命令,即使是在INSERT INTO命令之后,INSERT INTO命令的“先前值”也顯示了新值。 似乎先處理了更新命令。

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語句。

我的錯。

不,問題是你在;

  • 從Deal @Deal_ID中讀取@PrevSettleDate。
  • 將@PrevSettleDate寫入歷史記錄以獲取交易@Deal_ID-到目前為止一切順利。
  • 更新@Deal_ID以指向下一個交易-這是您出錯的地方。
  • 更新下一個交易的日期。
  • 回到開始,從您剛剛更新的交易中讀取PrevSettleDate。
    ...

如果將@Deal_ID的更新移到循環的開始,事情應該就可以了。

我會使用update語句的OUTPUT子句。 這將使您可以將舊值保存到表變量中,甚至直接保存到歷史表中。 您可以通過這種方式一次完成所有更新。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM