Las sentencias de control en SQL Server son esenciales para manejar el flujo de ejecución de las consultas y scripts. Entre las más destacadas se encuentra la sentencia WHILE, que permite ejecutar una o varias instrucciones mientras se cumple una condición booleana.
La sentencia CASE.- permite
evaluar diferentes opciones,
por cada opción se realiza una
instrucción específica.
SINTAXIS
CASE [input_expression]
WHEN [eval_expression] THEN [output_expression]
…
ELSE [output_expression]
END
Ejemplos:
DECLARE @variable int = 5;
SELECT [simple] = CASE @variable
WHEN 1 THEN ‘One’
WHEN 5 THEN ‘Five’
ELSE ‘Some other number’
END;
Estructura condicional IF.- permite
la ejecución de una o varias líneas
de código según la condición.
SINTAXIS
IF condicion
{sentenca_sql | bloque_sql}
[ELSE
{sentencia_sql | bloque_sql}]
DECLARE
/*Para poder ver la utilidad de éste script
basta con cambiar los valores de las variables
V_A y V_B según queramos. */
V_A NUMBER := 30;
V_B NUMBER := 30;
BEGIN
/*En caso de que la variable V_A sea mayor
se mostrará un mensaje*/
IF V_A > V_B THEN
dbms_output.put_line('V_A es mayor');
ELSE
dbms_output.put_line('V_B es mayor o igual que V_A');
END IF;
END;
Sentencia GOTO.- nos permite desviar el flujo de ejecución hacia una etiqueta.
Fue muy utilizada en versiones anteriores de SQL SERVER
SINTAXIS
Define the label:
label:
Alter the execution:
GOTO label
DECLARE @Counter int;
SET @Counter = 1;
WHILE @Counter < 10
BEGIN
SELECT @Counter
SET @Counter = @Counter + 1
IF @Counter = 4 GOTO Branch_One --Jumps to the first branch.
IF @Counter = 5 GOTO Branch_Two --This will never execute.
END
Branch_One:
SELECT 'Jumping To Branch One.'
GOTO Branch_Three; --This will prevent Branch_Two from executing.
Branch_Two:
SELECT 'Jumping To Branch Two.'
Branch_Three:
SELECT 'Jumping To Branch Three.';
Sentencia WHILE.- permite la ejecución de una o varias instrucciones.
SINTAXIS
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK }
EJEMPLO
DECLARE
V_NUM NUMBER := 1;
BEGIN
WHILE V_NUM <= 13 LOOP
DBMS_OUTPUT.PUT_LINE('El valor V_NUM es :' || V_NUM);
V_NUM := V_NUM + 2.1;
END LOOP;
END;