2011-10-06 23 views
126

¿Cómo se causa un retraso en la ejecución durante un número específico de segundos?Cómo esperar durante 2 segundos

Esto no lo hace:

WAITFOR DELAY '00:02'; 

¿Puede alguien ayudarme con el formato?

+0

Parece que el hilo espera mucho más de 2 segundos. Me doy cuenta de que puede llevar más de 2 segundos para que el hilo continúe, pero está tardando alrededor de 1 minuto cuando se ejecuta en un DB local que estoy utilizando y no tengo otra actividad en marcha. – ChadD

+0

Esto realmente esperará exactamente 2 minutos. –

+2

posible duplicado de [Comando inactivo en T-SQL?] (Http://stackoverflow.com/questions/664902/sleep-command-in-t-sql) – Jesse

Respuesta

241

The documentation for WAITFOR() no establece explícitamente el formato de cadena requerido.

Esto va a esperar durante 2 segundos:

WAITFOR DELAY '00:00:02'; 

El formato es hh:mi:ss.mmm.

17

¿Qué tal esto?

WAITFOR DELAY '00:00:02'; 

Si tiene "00:02" está interpretando eso como Horas: Minutos.

48

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 valor de DATETIME. Puede pensar que estoy confundiendo esto con WAITFOR TIME, pero también funciona para WAITFOR DELAY.

Consideraciones para pasar DATETIME:

  • Se deben pasar como una variable, por lo que no es una buena de una sola línea más.
  • El retraso se mide como el tiempo desde la Época ('1900-01-01').
  • Para situaciones que requieren una cantidad variable de retraso, es mucho más fácil manipular un DATETIME que formatear correctamente un 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 vs DELAY:

¿Alguna vez ha notado que si accidentalmente se pasa WAITFOR TIME una fecha que Ya pasó, incluso por solo un segundo, nunca volverá? Compruébelo usted mismo:

--Example 3 
DECLARE @Time1 DATETIME 
SELECT @Time1 = getdate() 
WAITFOR DELAY '00:00:01' 
WAITFOR TIME @Time1 --WILL HANG FOREVER 

Desafortunadamente, WAITFOR DELAY va a hacer lo mismo si se le pasa un valor negativo DATETIME (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, aun así, recomendaría el uso de WAITFOR DELAY durante un tiempo estático porque siempre se puede confirmar su retraso es positivo y va a permanecer así durante todo el tiempo que tarda el código para llegar a la declaración WAITFOR.

Cuestiones relacionadas