正如其他答案中提到的,以下所有内容都适用于标准的基于字符串的语法。
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 与 DELAY 的说明:
你有没有注意到,如果你不小心将一个已经过去的日期传递给WAITFOR TIME,即使只是一秒钟,它也永远不会回来?看看吧:
--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 语句需要多长时间,它都会保持这种状态。