¿Cómo se causa un retraso en la ejecución durante un número específico de segundos?
Esto no lo hace:
WAITFOR DELAY '00:02';
¿Cuál es el formato correcto?
¿Cómo se causa un retraso en la ejecución durante un número específico de segundos?
Esto no lo hace:
WAITFOR DELAY '00:02';
¿Cuál es el formato correcto?
Respuestas:
La documentación para WAITFOR()
no presenta explícitamente el formato de cadena requerido.
Esto esperará 2 segundos:
WAITFOR DELAY '00:00:02';
El formato es hh:mi:ss.mmm
.
Como se menciona en otras respuestas, todo lo siguiente funcionará para la sintaxis estándar basada en cadenas.
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
También hay un método alternativo para pasarle un DATETIME
valor. Puede pensar que estoy confundiendo esto con WAITFOR TIME
, pero también funciona WAITFOR DELAY
.
Consideraciones para pasar DATETIME
:
'1900-01-01'
).DATETIME
que formatear correctamente a VARCHAR
.Cómo esperar 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
Una nota sobre la espera de TIME
vsDELAY
:
¿Alguna vez has notado que si accidentalmente pasas WAITFOR TIME
una fecha que ya pasó, incluso por solo un segundo, nunca volverá? Echale un vistazo:
--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER
Desafortunadamente, WAITFOR DELAY
hará lo mismo si le pasa un DATETIME
valor negativo (sí, eso es una cosa).
--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER
Sin embargo, aún recomendaría usar WAITFOR DELAY
durante un tiempo estático porque siempre puede confirmar que su retraso es positivo y permanecerá así durante el tiempo que tarde su código en llegar a la WAITFOR
declaración.