2009-12-04 37 views
2

我有一個場景,我正在循環一個事務中的結果集,我需要在表中爲每次迭代通過結果集插入一個唯一的日期時間值 - 每次都會重新計算GetDate(),還是隻計算第一次,然後通過循環的每次迭代是相同的?GetDate()是否會在事務內的循環內的每個迭代中重新評估?

我的僞代碼如下:提前

BEGIN TRANSACTION 
GO 

DECLARE @ID INT 
DECLARE @table TABLE (/* Columns */) 

WHILE (SELECT COUNT(*) FROM @table WHERE PROCESSED = 0) > 0 
     BEGIN 

      SELECT TOP 1 @ID = ID FROM @table WHERE PROCESSED = 0 

      -- INSERT GetDate() into child table at this point. 
      -- Will GetDate() be re-evaluated each time? 

      UPDATE @table SET PROCESSED = 1 WHERE ID = @ID 

     END 

END TRANSACTION 
GO 

謝謝!

+1

順便說一句,你可能想要使用GetUtcDate()而不是GetDate()來避免模糊的夏令時時間戳。 – JasDev 2009-12-04 15:38:41

+0

爲什麼你甚至在做一個循環?改爲使用基於集合的插入。 – HLGEM 2009-12-04 16:50:40

回答

7

是的。

如果您想避免重新評估它,請將其值存儲在循環前的變量中,然後插入該值。

+0

+1正確的答案。 – 2009-12-04 15:40:56

相關問題