Jak spowodować opóźnienie w wykonaniu przez określoną liczbę sekund?Jak czekać przez 2 sekundy
nie zrobić:
WAITFOR DELAY '00:02';
Czy ktoś może mi pomóc z formatem?
Jak spowodować opóźnienie w wykonaniu przez określoną liczbę sekund?Jak czekać przez 2 sekundy
nie zrobić:
WAITFOR DELAY '00:02';
Czy ktoś może mi pomóc z formatem?
The documentation for WAITFOR()
nie określa w sposób jawny wymaganego formatu ciągu znaków.
To będzie czekać na 2 sekundy:
WAITFOR DELAY '00:00:02';
Format jest hh:mi:ss.mmm
.
Co powiesz na to?
WAITFOR DELAY '00:00:02';
Jeśli masz "00:02", interpretujesz to jako godziny: minuty.
Jak wspomniano w innych odpowiedziach, wszystkie następujące czynności będą działać dla standardowej składni opartej na łańcuchach.
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
Istnieje również alternatywna metoda podania jej wartości DATETIME
. Możesz pomyśleć, że pomylam to z WAITFOR TIME
, ale działa również dla WAITFOR DELAY
.
Rozważania dotyczące przechodzenia DATETIME
:
'1900-01-01'
).DATETIME
niż poprawnie sformatować VARCHAR
.Jak odczekać 2 sekundy:
--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
Uwaga na oczekiwanie na TIME
vs DELAY
:
Czy zauważyłeś, że jeśli przypadkowo przechodzić WAITFOR TIME
datę, która już minął, nawet przez sekundę, to nigdy nie wróci? Sprawdź:
--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER
Niestety WAITFOR DELAY
zrobi to samo, jeśli go przekazywać wartość ujemną DATETIME
(tak, to jest rzeczą).
--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER
Jednak chciałbym jeszcze polecić użyciu WAITFOR DELAY
na czas statycznym, ponieważ zawsze można potwierdzić swoją opóźnienie jest pozytywna i będzie to pobyt w ten sposób na jak długo to trwa, aby osiągnąć swój kod oświadczenie WAITFOR
.
Nitka wydaje się czekać znacznie dłużej niż 2 sekundy. Zdaję sobie sprawę, że wątek może trwać dłużej niż 2 sekundy, ale trwa około 1 minuty, gdy uruchomiona jest lokalna baza danych, z której aktualnie korzystam i nie wykonuję żadnej innej czynności. – ChadD
To rzeczywiście będzie czekać dokładnie 2 minuty. –
możliwy duplikat [polecenia uśpienia w T-SQL?] (Http://stackoverflow.com/questions/664902/sleep-command-in-t-sql) – Jesse