他の回答で述べたように、以下のすべてが標準の文字列ベースの構文で機能します。
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
TIME
vsの待機に関する注意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
ステートメントに到達するまでどれほど長くかかるかを常に確認できるため、静的な時間を超えて使用することをお勧めします。