2

トランザクション内で結果セットをループしているシナリオがあり、結果セットの反復ごとにテーブル内に一意の日時値を INSERT する必要があります - 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

前もって感謝します!

4

1 に答える 1

7

はい。

再評価を避けたい場合は、その値をループの前に変数に格納し、代わりに挿入します。

于 2009-12-04T15:33:28.020 に答える