2秒待つ方法は?


187

指定された秒数の間、実行の遅延をどのように引き起こしますか?

これはそれをしません:

WAITFOR DELAY '00:02';

正しい形式は何ですか?


スレッドは2秒よりずっと長く待機しているようです。スレッドが継続するのに2秒以上かかる可能性があることはわかっていますが、ローカルデータベースで実行しているときに、私が使用している他のアクティビティがないために約1分かかります。
チャド

1
これは実際には正確に2分間待機します。
Nick Chammas、2011年

回答:



99

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

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を適切にフォーマットするよりもを操作する方がはるかに簡単ですVARCHAR

2秒待つ方法:

--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

TIMEvsの待機に関する注意DELAY

WAITFOR TIMEすでに過ぎた日付を誤って1秒でも過ぎると、二度と戻らないことに気づいたことがありますか?見てみな:

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

残念ながら、WAITFOR DELAY負のDATETIME値を渡すと同じことが行われます(そうです)。

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

ただし、WAITFOR DELAY遅延が正であることを常に確認でき、コードがWAITFORステートメントに到達するまでどれほど長くかかるかを常に確認できるため、静的な時間を超えて使用することをお勧めします。


25

これはどう?

WAITFOR DELAY '00:00:02';

「00:02」がある場合、それはそれをHours:Minutesとして解釈しています。


2

この例を試してください:

exec DBMS_LOCK.sleep(5);

これはスクリプト全体です:

SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "Start Date / Time" FROM DUAL;

exec DBMS_LOCK.sleep(5);

SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "End Date / Time" FROM DUAL;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.