Como causar um atraso na execução por um número especificado de segundos?
Isso não faz:
WAITFOR DELAY '00:02';
Qual é o formato correto?
Como causar um atraso na execução por um número especificado de segundos?
Isso não faz:
WAITFOR DELAY '00:02';
Qual é o formato correto?
Respostas:
A documentação paraWAITFOR()
não apresenta explicitamente o formato de string necessário.
Isso irá esperar por 2 segundos:
WAITFOR DELAY '00:00:02';
O formato é hh:mi:ss.mmm
.
Conforme mencionado em outras respostas, todos os itens a seguir funcionarão para a sintaxe padrão baseada em string.
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
Há também um método alternativo de passar um DATETIME
valor para ele. Você pode pensar que estou confundindo isso WAITFOR TIME
, mas também funciona WAITFOR DELAY
.
Considerações para aprovação DATETIME
:
'1900-01-01'
).DATETIME
do que formatar corretamente a VARCHAR
.Como esperar por 2 segundos:
--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
Uma observação sobre a espera de TIME
vs DELAY
:
Você já reparou que, se acidentalmente passar WAITFOR TIME
uma data que já passou, mesmo que por apenas um segundo, ela nunca voltará? Confira:
--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER
Infelizmente, WAITFOR DELAY
fará o mesmo se você passar um DATETIME
valor negativo (sim, isso é uma coisa).
--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER
No entanto, eu ainda recomendaria o uso WAITFOR DELAY
durante um período estático, pois você sempre pode confirmar que seu atraso é positivo e permanecerá assim por quanto tempo o seu código levar para chegar à WAITFOR
declaração.