martes, 7 de julio de 2015

Receta T-SQL No. 2.6: Uso de la Sentencia WHILE

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código T-SQL
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

Receta T-SQL de uso de la sentencia WHILE. Esta sentencia nos facilitará la ejecución de sentencias SQL o un bloque de sentencias. Nos será de plena utilidad tanto para realizar cálculos repetitivos como también la ejecución de sentencias SQL que requieren un tratamiento iterativo mientras que se cumpla un determinado predicado.

1. Problema

Debemos escribir un bloque de sentencias que se repitan un determinado número de veces siempre y cuando se cumpla una condición.

2. Solución

T-SQL cuenta con la construcción WHILE para este cometido. Podremos escribir un bloque de sentencias para realizar cálculos que de lo contrario podrían requirir decenas o centeras de líneas de código y en conseciencia podría ser tedioso y extenuante.

3. Discusión de la Solución

La sintaxis declarativa básica de una sentencia WHILE [2] es la siguiente:

WHILE expresion_booleana
    { sentencia_sql | bloque_sentencias | BREAK | CONTINUE } 

Descripción:
  • expresion_booleana: es una expresión que se evalúa en FALSO o VERDADERO. Si es VERDADERO (TRUE) la sentencia ejecutará el bloque de código declarado en su cuerpo, de lo contrario, continuará con las siguientes sentencias en el resto de código.
  • sentencia_sql | bloque_sentencias: Grupo de sentencias T-SQL o bloque de sentencias. Para el bloque de sentencias es necesario usar BEGIN y END.
  • BREAK: Finaliza la ejecución del ciclo y continua con la siguiente sentencia fuera del ciclo.
  • CONTINUE: Finaliza la iteración actual y continua con la siguiente sentencia dentro del ciclo.
Ahora escribamos un ejemplo sencillo para entender esta sintaxis y su utilidad:

Archivo T-SQL Receta_TSQL-2.6_Ej_1.sql:

En la línea 1 declaramos la variable entera (INT) contador. A continuación, asignamos el valor 0 a esta variable e inmediatamente (línea 3) se inicia el la ejecución de la sentencia WHILE evaluando la expresión booleana:

@contador <> 5


La cual se puede traducir como: "mientras que el valor de @contador sea distinto de 5 ejecute el siguiente bloque de sentencias..."

Notemos el inicio de un bloque BEGIN...END; dentro de este bloque incrementos en una unidad la variable @contador:

SET @contador = @contador + 1


e imprimimos el valor actual de esta variable en la salida mensajes:

PRINT 'Contador: ' + CAST(@contador AS CHAR)


Este ciclo se repetirá hasta 5 veces (lo podemos deducir a partir del predicado en la expresión booleana). Cuando finalice su ejecución tendremos en pantalla:

Contador: 1                             
Contador: 2                             
Contador: 3                             
Contador: 4                             
Contador: 5  
Ahora, escribamos otro ejemplo para resaltar el uso de BREAK y CONTINUE:

Archivo T-SQL Receta_TSQL-2.6_Ej_1.sql [Enlace alternativo]:



Resaltemos la línea 6: la sentencia IF comprueba que las dos expresiones booleanas sean verdaderas: @contador >= 4 AND @contador <= 9. Cuando esto es así, en la línea 8 con CONTINUE se interrumpe la iteración actual y se pasa a la siguiente. Esto quiere decir que la sentencia de impresión, PRINT, (línea 9) jamás se ejecutará.

La ejecución de esta sentencia WHILE (línea 3) se interrumpirá cuando el valor de la variable @contador se mayor a 13: IF @contador > 13.

Una vez ejecutemos todo este código, obtendremos:

The counter : 1                             
The counter : 2                             
The counter : 3                             
The counter : 10                            
The counter : 11                            
The counter : 12                            
The counter : 13

4. Práctica: Código T-SQL

El siguiente ejemplo lo he tomado de [1] y he hecho adaptaciones de idioma con los nombres de las variables declaradas al inicio del código. El propósito de este código es crear una tabla tabla temporal para insertar información básica de las tablas de la base de datos AdventureWorks. Una vez tengamos esta información, con una sentencia WHILE consultamos la información de espacio usado por cada tabla a través del procedimiento almacenado (ya veremos más adelante este interesante tema) sp_spaceused mientras que aún exista tablas por consultar en la tabla @TablasAdventureWorks. Veamos:


Ejecutamos este código en Microsoft SQL Server Management Studio y obtenemos:
Resultado ejecución ejemplo 3.
Figura 1. Resultado ejecución ejemplo 3.

5. Conclusiones

Comprendimos cómo usar la sentencia WHILE para repetir n cantidad de veces un grupo de sentencias T-SQL. Saber esto nos va a permitir escribir sentencias T-SQL más sofisticadas y acorde a requerimientos más complejos en donde el patrón de iteración o repetición sea mandatario o más idóneo para la solución.

6. Glosario

  • BREAK
  • Ciclo
  • CONTINUE
  • Iteración
  • Repetición
  • Sentencia
  • T-SQL

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]: WHILE (Transact-SQL) - https://msdn.microsoft.com/en-us/library/ms178642.aspx


J

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.