如何等待2秒?


186

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

这不会这样做:

WAITFOR DELAY '00:02';

正确的格式是什么?


该线程正在等待的时间远远超过2秒。我知道线程继续可能需要2秒钟以上的时间,但是在我正在使用的本地db上运行并且没有其他活动进行时,大约需要1分钟。
乍得

1
实际上,这将恰好等待2分钟。
Nick Chammas

Answers:



99

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

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')的时间。
  • 对于需要可变延迟量的情况,操作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

关于等待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语句,延迟都会一直保持这种状态。


25

这个怎么样?

WAITFOR DELAY '00:00:02';

如果您使用“ 00:02”,则将其解释为“小时:分钟”。


2

试试这个例子:

exec DBMS_LOCK.sleep(5);

这是整个脚本:

SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "Start Date / Time" FROM DUAL;

exec DBMS_LOCK.sleep(5);

SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "End Date / Time" FROM DUAL;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.