2011-10-06 93 views
126

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

这不做到这一点:

WAITFOR DELAY '00:02'; 

有人可以帮助我的格式?

+0

该线程似乎等待时间超过2秒。我意识到线程可能需要2秒以上的时间才能继续,但运行在我正在使用的本地数据库上需要大约1分钟,并且没有其他活动正在进行。 – ChadD

+0

这实际上会等待2分钟。 –

+2

[T-SQL中的睡眠命令?]的可能重复(http://stackoverflow.com/questions/664902/sleep-command-in-t-sql) – Jesse

回答

17

这个怎么样?

WAITFOR DELAY '00:00:02'; 

如果您有“00:02”,它将解释为Hours:Minutes。

48

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

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

你有没有注意到,如果你不小心通过WAITFOR TIME一个日期,已经通过,即使只有一秒钟,它将永远不会回来?检查出来:

--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 

不过,我还是会建议使用WAITFOR DELAY在静态的时间,因为你总是可以确认的延迟是积极的,它会持续这种状态但需要多长时间你的代码,以达到WAITFOR声明。