如何等待2秒?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

如何导致延迟执行指定的秒数?

这不是这样做的:

WAITFOR DELAY '00:02';

有人可以帮助我的格式?

提问于
用户回答回答于

文档WAITFOR()没有明确规定所需的字符串格式。

这将等待2秒钟:

WAITFOR DELAY '00:00:02';

格式是hh:mi:ss.mmm

用户回答回答于

以下所有内容都适用于标准的基于字符串的语法。

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

  • 它必须作为变量传递,所以它不再是一个很好的单线程。
  • 延迟是从Epoch('1900-01-01')开始计算的。
  • 对于需要可变数量延迟的情况,操作a 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了一个已经通过的日期,即使只是一秒钟,它也不会回来?一探究竟:

--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声明。

扫码关注云+社区