Las estructuras de control en SQL son fundamentales para gestionar el flujo de ejecución de consultas y procedimientos almacenados. Entre ellas, destaca la estructura IF, que permite evaluar una expresión booleana y ejecutar diferentes bloques de código según el resultado.
Se desaconseja el uso de GOTO y se recomienda el uso de TRY - CATCH
Desvia el flujo de ejecución hacia una etiqueta, usada para control de errores
DECLARE @divisor int, @dividendo int, @resultado int
SET @dividendo = 100
SET @divisor = 0
SET @resultado = @dividendo/@divisor
IF @@ERROR > 0
GOTO error
PRINT 'No hay error'
RETURN
error:
PRINT 'Se ha producido una division por cero'
Estructura CASE
Evalua una expresión y devuelve un valor
CASE
WHEN THEN
WHEN THEN
ELSE
END
Estructura IF
Admite uso de subconsultas
Evalua una expresión Booleana
IF ()
BEGIN...
END
ELSE IF ()
BEGIN...
END
CASE <expresion>
WHEN <valor_expresion> THEN <valor_devuelto>
WHEN <valor_expresion> THEN <valor_devuelto>
ELSE <valor_devuelto> -- Valor por defecto
END
Instrucción BREAK
El bucle deja de repetirse
DECLARE @contador int
SET @contador = 0
WHILE (1 = 1)
BEGIN
SET @contador = @contador + 1
IF (@contador % 50 = 0)
BREAK
PRINT 'Iteracion del bucle ' + cast(@contador AS varchar)
END
Instrucción CONTINUE
Pasa a la siguiente iteración del bucle
DECLARE @contador int
SET @contador = 0
WHILE (@contador < 100)
BEGIN
SET @contador = @contador + 1
IF (@contador % 2 = 0)
CONTINUE
PRINT 'Iteracion del bucle ' + cast(@contador AS varchar)
END
Bucle WHILE
Permite el uso de subconsultas
DECLARE @coRecibo int
WHILE EXISTS (SELECT * FROM RECIBOS WHERE PENDIENTE = 'S')-- Ojo, la subconsulta se ejecuta
una vez por cada iteracion del bucle!
BEGIN