2016-10-18 7 views
2

私はを理解していますが、GETDATE()は常にループ内で異なる値を返すようにしてください。WHILEループでGETDATE()を使用すると常に同じ値が返されます

私はこのTSQL持っている:

DECLARE @WaitUntilTime DATETIME = DATEADD(SECOND, 10, GETDATE()) 

WHILE (DATEDIFF(SECOND, GETDATE(), @WaitUntilTime) > 0) 
BEGIN 
    SELECT GETDATE(), @WaitUntilTime 
END 

をしかし、それは常にGETDATE()に同じ値を出力しています、と私はそれがしたいようにループが10秒後に終了することはありません。どうして?

また、同様のケースのように聞こえるthis answerが見つかりましたが、SELECTクエリではGETDATE()が1回評価されます。それがwhileループにも当てはまるかどうかはわかりません。

ところで、私はWAITFORについて知っていますが、私は1つのバッチ内に遅延を導入したいので使用できません。 10秒の遅延の後

+0

あなたの選択SET – scsimon

答えて

2
DECLARE @WaitUntilTime DATETIME = DATEADD(SECOND, 10, GETDATE()) 
DECLARE @Dummy int 

WHILE (DATEDIFF(SECOND, GetDate(), @WaitUntilTime) > 0) 
BEGIN 
    Set @Dummy=1 
END 
SELECT GetDate(), @WaitUntilTime 

戻り

(No column name)  (No column name) 
2016-10-18 13:53:20.000 2016-10-18 13:53:20.140 
+0

ニース、感謝とは異なり、暗黙的なトランザクションです!自分の道に何が間違っているのか説明できますか?問題は本当になぜこれが起こっているのかということです。 –

+0

それはクールです、私はなぜ同様に理解したいと思います。 –

+0

@ rory.apスタックアップ10,072,069 SELECTS ..ダミーをカウンタに変更しました。(ちょうど楽しみのため) –