如何等待2秒

Cha*_*adD 172 t-sql sql-server sql-server-2008

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

这不是这样的:

WAITFOR DELAY '00:02';
Run Code Online (Sandbox Code Playgroud)

有人可以帮我格式化吗?

Nic*_*mas 328

该文档WAITFOR()未明确列出所需的字符串格式.

这将等待2秒钟:

WAITFOR DELAY '00:00:02';
Run Code Online (Sandbox Code Playgroud)

格式是hh:mi:ss.mmm.


Sur*_*ish 90

如其他答案中所述,以下所有内容都适用于标准的基于字符串的语法.

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
Run Code Online (Sandbox Code Playgroud)

还有一种传递DATETIME值的替代方法.你可能会认为我对此感到困惑WAITFOR TIME,但它也适用于WAITFOR DELAY.

传递的注意事项DATETIME:

  • 它必须作为变量传递,因此它不再是一个很好的单线程.
  • 延迟测量为自Epoch('1900-01-01')以来的时间.
  • 对于需要可变延迟量的情况,操作a DATETIME要比正确格式化a 更容易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
Run Code Online (Sandbox Code Playgroud)

关于等待TIMEvs的说明DELAY:

你有没有注意到如果你不小心通过WAITFOR TIME了已经过去的日期,即使只是一秒钟,它也永远不会回来?看看这个:

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

不幸的是,WAITFOR DELAY如果你传递一个负值DATETIME,它会做同样的事情(是的,这是一件事).

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

但是,我仍然建议WAITFOR DELAY在静态时间内使用,因为您可以随时确认您的延迟是肯定的,并且只要您的代码到达WAITFOR语句,它就会保持这种状态.


Joh*_*hnD 23

这个怎么样?

WAITFOR DELAY '00:00:02';
Run Code Online (Sandbox Code Playgroud)

如果您有"00:02",它会将其解释为小时:分钟.