IF en SQL SERVER

Buenas noches, ya estamos terminando este martes queridos lectores, el día de hoy ya entraremos de lleno a la programación TRANSACT-SQL y empezaremos hablando de la estructura condicional IF, así como en cualquier lenguaje de programación existen las sentencias IF, también en TRANSACT-SQL existen, así que en este post hablaremos específicamente de la sentencia IF, aunque en otro post hablaremos también de las sentecias WHILE y CASE. Pues bien, empecemos y espero que sea de su utilidad.


La estructura IF evalúa una condición lógica y en función del resultado se realiza una u otra expresión. Dicha expresión se específica mediante una expresión lógica donde el resultado pueda ser de tipo booleano, es decir true o false


Sintaxis Genérica
IF <CONDICION LOGICA>
<BEGIN>
       <expresiones verdaderas>
<END>

Donde:
  • CONDICION LOGICAEs la expresión que el usuario debe  debe determinar para ejecutar una o más expresiones. Hay que tener en cuenta que aquí es el momento de usar los operadores lógicos(< <= >> <>) y relacionales (AND OR NOT EXIST)
  • BEGIN: Marca el inicio de las expresiones si la condición resultara TRUE en su evaluación
  • END: Pone fin a las expresiones iniciadas desde el operador BEGIN
Pero basta de teoría, pasemos a los ejemplos que es donde se entiende mejor estos conceptos.


Ejemplo 1:
Script que permita insertar un nuevo registro a la tabla PAIS, en caso se registre duplicidad en el nombre de un país mostrar un mensaje de PAIS YA REGISTRADO caso contrario, ingresar dicho país y al final mostrar un mensaje de PAIS REGISTRADO CORRECTAMENTE

---1.
DECLARE @IDPAIS CHAR(4) = '0014', @PAIS VARCHAR(40)='HONDURAS'

---2.
IF EXISTS (SELECT * FROM PAIS WHERE PAIS=@PAIS)
BEGIN
       PRINT 'PAIS YA REGISTRADO'
END

ELSE
BEGIN
       INSERT INTO PAIS
       VALUES (@IDPAIS, @PAIS)
       PRINT 'PAIS AGREGADO CORRECTAMENTE'
END
GO

En el punto 1 se declaran dos variables, la primera almacenará el código del nuevo país a registrar y la segunda variable almacenará el nombre del país.

En el punto 2 se verifica la existencia del valor asignado a la variable @PAIS dentro de la tabla PAIS. En caso la condición sea TRUE se muestra el mensaje PAÍS YA REGISTRADO, cuando la condición sea FALSE se aplica la instrucción INSERT y el mensaje de PAÍS REGISTRADO CORRECTAMENTE.

Veamos el resultado con la variable 'Honduras'


Ahora cambiare el valor de la variable @PAIS y le pondré el valor de 'COSTA RICA', veamos el resultado:


Ejemplo 2:
Script que permita mostrar el mensaje de NO HAY PASAJEROS EN ESTE PAIS solo cuando el total de pasajeros asignados a un determinado PAIS no tenga registros en la tabla PASAJERO. Caso contrario determinar cuántos pasajeros tiene dicho país y mostrarlos con el mensaje EL PAIS… TIENE… PASAJEROS

--1.
DECLARE @PAIS VARCHAR(40)='CHINA'
--2.
IF (SELECT COUNT(*)
       FROM PASAJERO PAS
       LEFT JOIN PAIS PAI ON PAS.IDPAIS=PAI.IDPAIS
       GROUP BY PAI.PAIS
       HAVING PAI.PAIS=@PAIS) IS NULL
       PRINT 'NO HAY PASAJEROS EN ESTE PAIS'
      
       ELSE
--3
       BEGIN
             DECLARE @TOTAL INT
             SELECT @TOTAL=COUNT(*)
                    FROM PASAJERO PAS
                    LEFT JOIN PAIS PAI ON PAS.IDPAIS=PAI.IDPAIS
                    GROUP BY PAI.PAIS
                    HAVING PAI.PAIS=@PAIS
             PRINT 'EL PAIS ' +@PAIS+' TIENE ' + CAST(@TOTAL AS CHAR(2)) + 'PASAJEROS'
       END

En el punto uno se declara la variable local @PAIS y se le asigna el valor CHINA para realizar la prueba.

En el punto dos se evalúa el total de pasajeros del país, en este caso CHINA, se usa la clausula LEFT JOIN para poder contar también a los países que no registran pasajero alguno, la condición es comparada con el operador IS NULL justamente para determinar si dicho país no tiene pasajeros asignados; en caso que sea TRUE entonces muestra el mensaje NO HAY PASAJEROS EN ESTE PAIS.

En el punto tres las instrucciones implementadas solo ocurren cuando la condición del punto dos es falso, eso quiere decir que el país si tiene pasajeros asignados. Primero hay que indicar que todas estas sentencias debes estar envueltas con BEGIN END; luego se declara la variable @TOTAL para almacenar el total de pasajeros, ya que estamos en la condición donde no es nulo el número de pasajeros. Finalmente se imprime el mensaje mostrando el nombre del país y el total de pasajeros que tiene asignado.

En caso de que la asignación del país sea CHINA entonces el mensaje es el siguiente:

Si asignamos el país PERU entonces el mensaje sería el siguiente:
Ejemplo 3
Script que permita mostrar un mensaje de acuerdo al total de registros por un determinado año, según la siguiente tabla
Rango
Mensaje
Hasta 10
Total de reservas se encuentra entre 1 y 10
11 hasta 15
Total de reservas se encuentra entre 11 y 15
Más de 15
Total de reservas supera 15

--1
DECLARE @AÑO INT=2012, @TOTAL INT

--2
SELECT @TOTAL = COUNT(*)
       FROM RESERVA RES
       GROUP BY YEAR(RES.FECHA)
       HAVING YEAR(RES.FECHA)=@AÑO

--3
IF @TOTAL>0 AND @TOTAL <=10
             PRINT 'EL TOTAL DE RESERVAS SE ENCUENTRA ENTRE 1 Y 10'
       ELSE IF @TOTAL>10 AND @TOTAL<=15
             PRINT 'EL TOTAL DE RESERVAS SE ENCUENTRA ENTRE 11 Y 15'
       ELSE
             PRINT 'EL TOTAL DE RESERVAS SUPERA 15'
GO

En el punto uno se declara la varable @AÑO con la asignación del valor 2012 y también la variable @TOTAL se declara para obtener el total de reservas por año.

En el punto dos se acumulan el total de reservas obtenidas desde la tabla RESERVA solo si el año agrupado es el mismo que está asignado en la variable.

En el punto tres se hace una comparación de rango de valores de este total acumulado en la variable @TOTAL,

Hasta aquí el post queridos lectores, esperando sea de su utilidad, como ven, ya empezamos con la programación TRANSACT, espero sus comentarios, los +1 o por lo menos den un clic en algún anuncio de su interés.



No hay comentarios.:

Publicar un comentario

Featured Post

Todas los SQL SERVER desde 2008 hasta 2019

 Buenas noches queridos lectores, el día de hoy les traigo un nuevo post con las versiones Developer  de SQL SERVER desde 2008 hasta 2019, s...