2011-10-06 88 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聲明。