2011-10-06 6 views
126

指定された秒数の間、実行が遅くなる原因を教えてください。2秒待つ方法

これはそれをしない:

WAITFOR DELAY '00:02'; 

誰かが形式で私を助けることができますか?

+0

スレッドが2秒以上待っているようです。スレッドが続行されるのに2秒以上かかることがありますが、私が使用しているローカルデータベースで実行しているときには約1分かかっています。 – ChadD

+0

これは実際には正確に2分待つことになります。 –

+2

[Sleep Command in T-SQL?]の複製が可能ですか?(http://stackoverflow.com/questions/664902/sleep-command-in-t-sql) – Jesse

答えて

241

The documentation for WAITFOR()は、必要な文字列形式を明示的にレイアウトしません。

これは2秒間待機します:

WAITFOR DELAY '00:00:02'; 

フォーマットがhh:mi:ss.mmmです。

17

これはいかがですか?

WAITFOR DELAY '00:00:02'; 

"00:02"がある場合は、「時間:分」と解釈されます。

48

他の回答で述べたように、以下のすべてが標準の文字列ベースの構文で機能します。

WAITFOR DELAY '02:00' --Two hours 
WAITFOR DELAY '00:02' --Two minutes 
WAITFOR DELAY '00:00:02' --Two seconds 
WAITFOR DELAY '00:00:00.200' --Two tenths of a seconds 

DATETIMEの値を渡す別の方法もあります。私はこれをWAITFOR TIMEと混同していると思うかもしれませんが、WAITFOR DELAYでも動作します。 DATETIMEを渡すため

考慮事項:

  • これは、変数として渡されなければならないので、それはもう素敵なワンライナーではありません。
  • 遅延は、エポック('1900-01-01')以降の時間として測定されます。
  • 可変遅延を必要とする状況の場合は、を適切にフォーマットするよりも、DATETIMEを操作する方がはるかに簡単です。あなたは今まであなたが誤ってそのWAITFOR TIME日付を渡すとことに気づいた

    --Example 1 
    DECLARE @Delay1 DATETIME 
    SELECT @Delay1 = '1900-01-01 00:00:02.000' 
    WAITFOR DELAY @Delay1 
    
    --Example 2 
    DECLARE @Delay2 DATETIME 
    SELECT @Delay2 = dateadd(SECOND, 2, convert(DATETIME, 0)) 
    WAITFOR DELAY @Delay2 
    

    ノートDELAYTIMEを待っている上:どのように2秒待つこと

すでに1秒でさえ、それは決して戻ってこないでしょうか?それをチェックアウト:あなたは(はい、それはことだ)、それを否定DATETIME値を渡す場合

--Example 3 
DECLARE @Time1 DATETIME 
SELECT @Time1 = getdate() 
WAITFOR DELAY '00:00:01' 
WAITFOR TIME @Time1 --WILL HANG FOREVER 

残念ながら、WAITFOR DELAYは同じことを行います。

--Example 4 
DECLARE @Delay3 DATETIME 
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0)) 
WAITFOR DELAY @Delay3 --WILL HANG FOREVER 

しかし、私はまだあなたが常にあなたの遅延が正であることを確認することができ、それはしかし、長い間、それはWAITFOR声明に到達するためにあなたのコードを取るためにそのように滞在するため、静的時間をかけてWAITFOR DELAYを使用することをお勧めします。

関連する問題