En SQL Server, puede usar WAITFOR
instrucción para retrasar la ejecución de un lote, procedimiento almacenado o transacción.
Funciona de forma similar a sleep()
de MySQL. función.
En realidad, probablemente sea más como una combinación de las tres funciones de "reposo" de Postgres:pg_sleep()
, pg_sleep_for()
y pg_sleep_until()
.
Digo esto porque WAITFOR
de SQL Server le da la opción de especificar un retraso de tiempo o un tiempo fijo real antes de que continúe la ejecución.
Ejemplo:especificar un retraso
Para especificar un retraso de tiempo, use el DELAY
argumento, seguido del tiempo real de espera/dormir.
El retraso puede ser de un máximo de 24 horas.
Aquí hay un ejemplo para demostrarlo.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR DELAY '00:00:10';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Resultado:
Time: 11.137s (11 seconds) +-------------------------+ | First Timestamp | |-------------------------| | 2020-06-29 00:02:30.963 | +-------------------------+ (1 row affected) Commands completed successfully. +-------------------------+ | Second Timestamp | |-------------------------| | 2020-06-29 00:02:41.610 | +-------------------------+ (1 row affected)
Cuando se usa el DELAY
opción, el valor tiene el formato hh:mm[[:ss].mss].
El valor se puede especificar en una fecha y hora formato de datos, o como una variable local. Sin embargo, las fechas no se pueden especificar, por lo que la fecha forma parte de datetime valor no está permitido.
Ejemplo:especificar una hora
Alternativamente, puede usar el TIME
argumento para especificar una hora en la que se ejecuta el lote, el procedimiento almacenado o la transacción.
En este caso, el valor proporcionado es el momento en que WAITFOR
finaliza la declaración.
Aquí hay un ejemplo para demostrarlo.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR TIME '04:33:30';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Resultado:
Time: 39.487s (39 seconds) +-------------------------+ | First Timestamp | |-------------------------| | 2020-06-29 04:32:51.183 | +-------------------------+ (1 row affected) Commands completed successfully. +-------------------------+ | Second Timestamp | |-------------------------| | 2020-06-29 04:33:30.160 | +-------------------------+ (1 row affected)
Aquí hay algunas cosas que debe tener en cuenta con respecto al valor de tiempo que proporciona:
- La hora se puede especificar en un datetime formato de datos, o se puede especificar como una variable local.
- Las fechas no se pueden especificar, por lo que la fecha forma parte de datetime el valor no está permitido.
- La hora tiene el formato hh:mm[[:ss].mss] y, opcionalmente, puede incluir la fecha 1900-01-01.
El retraso real puede variar
El retraso de tiempo real puede variar del tiempo que especifique, ya que esto dependerá de cosas como la carga del servidor.
El contador de tiempo comienza cuando WAITFOR
hilo de declaración está programado. Si el servidor está ocupado, es posible que el hilo no se programe de inmediato, por lo que el tiempo de demora puede ser mayor que el tiempo especificado.
Mensajes del agente del servidor
El WAITFOR
La declaración acepta algunos argumentos/valores que se aplican solo a los mensajes de Service Broker.
Al usar los mensajes de Service Broker, puede proporcionar un RECEIVE
declaración o un GET CONVERSATION GROUP
declaración, así como un TIMEOUT
argumento que especifica el período de tiempo, en milisegundos, para esperar a que llegue un mensaje a la cola.
Consulte la documentación oficial de Microsoft para obtener más información sobre estas opciones.