Las sentencias IF..ELSE en MS SQL Server

En general, la sentencia IF..ELSE es una sentencia de decisión en varios lenguajes de programación. La sentencia IF se utiliza para ejecutar un bloque de código si se cumple una condición. Si una condición no se satisface (FALSE) entonces opcionalmente se puede utilizar la sentencia ELSE.

En el caso de SQL Server, la sentencia IF se utiliza para ejecutar sentencias SQL si una condición es TRUE.

Por ejemplo:

1
2
3
4
5
6
7

IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;

En el código anterior, @table_name es una variable. Si el valor asignado a esta variable es “empleados”, la sentencia IF recuperará los datos de la tabla sto_empleados. Si el valor de la variable es cualquier otro que “empleado” la condición IF se convierte en FALSE y la parte ELSE se ejecutará.

Te mostraré este sencillo uso en los siguientes ejemplos con salida. En la última sección, también voy a explicar cómo cumplir “ELSE IF” propósito que no está disponible en SQL Server.

Un simple ejemplo de uso de la sentencia IF sin ELSE

Déjame empezar con un simple ejemplo de uso de la sentencia SQL IF. Evaluaremos una variable de tipo int para comprobar su valor. Si la condición es TRUE, la sentencia IF debe imprimir una sentencia.

El código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

/*Declarar una variable*/
DECLARE @val_chk INT;
/*Asignar una valye*/
SET @val_chk = 101;
/*Ejecutar la sentencia IF*/
IF @val_chk = 101
PRINT ‘The IF statement is TRUE’;
GO

La salida del código anterior es:

“La sentencia IF es TRUE”

Como tal el valor de la variable es 101.

¿Qué pasaría si la condición fuera FALSE?

Si la condición anterior fuera FALSE, por ejemplo, el valor de la variable fuera otro que 101, entonces no pasaría nada.

En el escenario del mundo real, puede querer ejecutar una sentencia o realizar alguna acción ya que la condición en la sentencia IF es TRUE o FALSE.

Para ello, utilice la sentencia ELSE. La sentencia dentro de la sentencia ELSE se ejecuta si la condición de la sentencia IF no se cumple.

Vea a continuación una demostración del uso de la sentencia ELSE:

El CÓDIGO IF ELSE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

/*Declarar una variable*/
DECLARE @val_chk INT;
/*Asignar una valye*/
SET @val_chk = 50;
/*Ejecutar la sentencia IF*/
IF @val_chk >= 101
PRINT ‘The IF statement is TRUE’;
ELSE
PRINT ‘La sentencia IF es FLASE’;
GO

La salida del código anterior es: “La sentencia IF es FALSA” ya que el valor de la variable no es mayor o igual a 101.

Ejecución de una sentencia SELECT basada en un valor VARCHAR

Ahora, permítame mostrar un ejemplo de uso de un valor de cadena en la sentencia IF. Se declara una variable de cadena y se le asigna un valor.

En las sentencias IF…ELSE, comprobaremos el valor de la variable y ejecutaremos la respectiva sentencia SELECT. Echa un vistazo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

/*Declarar una variable de cadena*/
DECLARE @nombre_tabla VARCHAR(60);
/*Asignar un valor*/
SET @nombre_tabla = ’empleados’;
/*Ejecutar la sentencia IF*/
IF @nombre_tabla = ’empleados’
SELECT * FROM sto_empleados;
ELSE
SELECT * FROM sto_products;
GO

La salida del código anterior es:

SQL IF ELSE

¿Qué pasa si tenemos varias opciones que comprobar? (NESTED IF)

En los ejemplos anteriores, sólo teníamos dos opciones. Cualquiera de los valores es TRUE o FALSE. Si es TRUE, la sentencia dentro del IF se ejecuta, de lo contrario, la parte ELSE se ejecuta.

En el caso de la ejecución de sentencias SELECT, digamos que requerimos comprobar diferentes nombres de tabla y ejecutar la respectiva sentencia SELECT para cada uno; entonces, ¿cómo podemos hacer eso?

La respuesta es usar la sentencia NESTED IF.

Por ejemplo, si el valor de la variable es ’empleados’ entonces ejecute el:

SELECT * FROM sto_empleados;

Si el valor es productos entonces ejecute:

SELECT * FROM sto_productos;

Para cualquier otro valor:

SELECT * FROM sto_emp_salary_paid;

Vea cómo se traduce esto en sentencias NESTED IF en SQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

/*Declarar una variable de cadena*/
DECLARE @nombre_tabla VARCHAR(60);
/*Asignar un valor*/
SET @table_name = ‘products’;
/*Ejecutar la sentencia IF*/
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @table_name = ‘products’
SELECT * FROM sto_products;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
GO

Puede ver, dentro de la sentencia ELSE, que se utiliza la palabra clave BEGIN donde se coloca otra sentencia IF (el IF anidado). Esto se termina usando la palabra clave END.

Aquí, colocamos otra condición a comprobar. Pruebe diferentes valores para la variable @nombre_tabla por sus propios nombres de tabla y reemplácelos en la sentencia SELECT también para experimentarlo usted mismo.

Vamos a otro nivel en la sentencia IF anidada

Sólo para mostrar que usted puede anidar a muchos niveles, voy a ir más allá mediante el uso de otra sentencia IF anidada.

Así, el escenario es para comprobar el valor de una variable (nombre_tabla). si el valor es productos entonces recuperar los datos de la tabla sto_productos. Si el valor es empleados entonces obtener los registros de sto_empleados. El tercer if comprueba si el valor de la variable es pedidos entonces obtiene los registros de la tabla pedidos.

Por último, la sentencia ELSE para cualquier otro valor de la variable debe obtener los registros de la tabla sueldos pagados de los empleados.

Vea la sentencia IF anidada múltiple para tres condiciones más ELSE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

/*Declarar una variable de cadena*/
DECLARE @nombre_tabla VARCHAR(60);
/*Asignar un valor*/
SET @table_name = ‘orders’;
/*Ejecutar la sentencia IF*/
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @table_name = ‘products’
SELECT * FROM sto_products;
ELSE
BEGIN
IF @table_name = ‘orders’
SELECT * FROM sto_orders;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
END ;
GO

Como pongo el valor de la variable como pedidos, la sentencia IF debería devolver los registros de la tabla sto_orders.

En el código, puede ver que la tercera sentencia IF se inicia después de la segunda palabra clave BEGIN.

Nota: Si desea utilizar la ejecución condicional en la sentencia SELECT entonces utilice la sentencia CASE en SQL.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.