如何等待2秒钟
如何导致延迟执行指定的秒数?
这不是这样做的:
WAITFOR DELAY '00:02';
有人可以帮助我的格式?
WAITFOR()
的文档没有明确规定所需的string格式。
这将等待2秒钟:
WAITFOR DELAY '00:00:02';
格式是hh:mi:ss.mmm
。
正如其他答案中提到的,以下所有内容都适用于标准的基于string的语法。
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
:
- 它必须作为一个variables传递,所以它不再是一个很好的单线程。
- 这个延迟被测量为自Epoch(
'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
注意事项:
你有没有注意到,如果你意外地通过了一个已经过去的date,即使只是一秒钟,它永远不会返回? 一探究竟:
--Example 3 DECLARE @Time1 DATETIME SELECT @Time1 = getdate() WAITFOR DELAY '00:00:01' WAITFOR TIME @Time1 --WILL HANG FOREVER
不幸的是,如果你传递一个负的DATETIME
值(是的,那是事), WAITFOR DELAY
将做同样的事情。
--Example 4 DECLARE @Delay3 DATETIME SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0)) WAITFOR DELAY @Delay3 --WILL HANG FOREVER
不过,我仍然build议在静态时间使用WAITFOR DELAY
,因为您始终可以确认您的延迟是积极的,并且可以保持这种状态,无论您的代码是否到达WAITFOR
语句,都将保持这种状态。
这个怎么样?
WAITFOR DELAY '00:00:02';
如果您有“00:02”,则将其解释为“小时:分钟”。