Índice
0. Introducción1. Problema
2. Solución
3. Discusión de la Solución
3.1 Sentencia WAITFOR
3.2 Utilidades de WAITFOR
4. Práctica: Código T-SQL
4.1 Práctica #1
4.2 Práctica #2
5. Conclusiones
6. Glosario
7. Literatura & Enlaces
0. Introducción
Aprenderemos a usar la sentencia WAITFOR para detener o bloquear la ejecución de un batch T-SQL durante un período determinado. Exploraremos la utilidad de esta sentencia a través de un par de ejemplos de práctica. También enunciáremos las demás aplicaciones interesantes de WAITFOR: espera hasta que una transacción se haya ejecutado durante cierto tiempo, y la modificación de un número de registros en una transacción.
1. Problema
Pausar la ejecución de un batch T-SQL durante un período.
2. Solución
T-SQL cuenta con la sentencia WAITFOR para la especificación un período de espera.
3. Discusión de la Solución
3.1 Sentencia WAITFOR
La sentencia WAITFOR [2] permite, además de bloquear la ejecución de un batch durante un período específico:
- retrasar la ejecución hasta determinada hora del día,
- establecer la espera hasta que se hayan modificado un número determinado de registros, e
- inclusive hasta que se retorne un registro en una transacción.
La sintaxis de uso de esta sentencia es así:
WAITFOR {DELAY 'time_to_pass' | TIME 'time_to_execute' | [ ( receive_statement ) | ( get_conversation_group_statement ) ] [ , TIMEOUT timeout ]}
Donde:
- DELAY: Indica la continuación de la ejecución de un batch, un procedimiento almacenado, o una transacción pasado un período.
- 'time_to_pass': Tiempo de espera. Máximo 24 horas.
- TIME: Indica el momento en que ha de continuar la ejecución de un batch, un precedimiento almacenado, o una transacción.
- 'time_to_execute': Tiempo en que debe empezar la ejecución.
- receive_statement: Sentencia RECEIVE valida. Opcional.
- get_conversation_group_statement: Sentencia GET CONVERSATION GROUP valida. Opcional.
- TIMEOUT timeout: Período de espera, en milisegundos, en la recepción de un mensaje en una cola. Opcional.
(Las sentencias RECEIVE y GET CONVERSATION GROUP las estudiáremos con detalle en futuras recetas.)
Podemos poner dos ejemplos de uso básicos de este sentencia:
Ejemplo de uso 1: Ejecución de procedimiento almacenado después de dos horas de retraso:
BEGIN
WAITFOR DELAY '02:00';
EXECUTE sp_helpdb;
END;
GO
Ejemplo de uso 2: Ejecución de procedimiento almacenado en un hora determinada -22:20-:
EXECUTE sp_add_job @tarea = 'TareaPrueba';
BEGIN
WAITFOR TIME '22:20'
EXECUTE sp_update_job @tarea = 'TareaPrueba';
@Mensaje = 'TareaEjecutada'
END;
GO
3.2 Utilidades de WAITFOR
Entre las utilidades interesantes de WAITFOR tenemos [1]:
- Ejecución asincrónica: Asumamos que hemos ejecutado un procedimiento almacenado y debemos esperar un período (e.g., 10 minutos) hasta que se haya finalizado su ejecución; una vez finalizado se han de ejecutar otras tareas que son dependientes de éste.
- Tareas de mantenimiento: Queremos que un procedimiento almacenado se ejecute a una hora determinada (e.g., horas no operativas del negocio); esto para la ejecución de tareas de mantenimiento o consolidación de datos de las tablas, o generación de reportes basados en agregaciones.
4. Práctica: Código T-SQL
4.1 Práctica #1:
En este primer ejemplo retrasaremos la ejecución de una sentencia SELECT pasados 10 segundos:
WAITFOR DELAY '00:00:10';
BEGIN
SELECT TransactionID, Quantity
FROM Production.TransactionHistory;
END;
> Prueba de ejecución:
4.2 Práctica #2:
Animación 1. Ejecución de sentencia T-SQL retrasada por 10 segundos.
Ahora veremos cómo podemos postponer la ejecución de una sentencia T-SQL a las 07:52:23, siendo las ~07:52:12:
WAITFOR TIME '07:52:13';
BEGIN
SELECT COUNT(*)
FROM Production.TransactionHistory;
END;
> Prueba de ejecución:
Animación 2. Ejecución de sentencia T-SQL a las 07:51:23. |
5. Conclusiones
Estudiamos la sentencia WAITFOR: con la cual podemos retrasar, o postponer (entre otras operaciones) la ejecución de una sentencia, procedimiento almacenado, o transacción. En la sección práctica, demostramos el uso de esta sentencia a través de simples ejemplos que nos dan una intuición acerca de su utilidad (enunciada en la sección 3.2).
En la próxima receta T-SQL estudiáremos la creación y uso de cursores.
6. Glosario
- Agregación
- Batch
- Consulta
- Ejecución
- Procedimiento almacenado
- Transacción
7. Literatura & Enlaces
[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.[2]: WAITFOR (Transact-SQL) - https://msdn.microsoft.com/en-us/library/ms187331.aspx
S
No hay comentarios:
Publicar un comentario
Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.