¿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 DATETIMEvalor. Puede pensar que estoy confundiendo esto con WAITFOR TIME, pero también funciona WAITFOR DELAY.
Consideraciones para pasar DATETIME:
'1900-01-01' ).DATETIMEque 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 TIMEvsDELAY :
¿Alguna vez has notado que si accidentalmente pasas WAITFOR TIMEuna 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 DELAYhará lo mismo si le pasa un DATETIMEvalor 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 DELAYdurante 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 WAITFORdeclaración.