Estructuras de Control en SQL
Bucle WHILE
Se repite mientras la expresión es Verdadera
WHILE <expresion>
BEGIN ...
END
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
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
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
Estructura IF
Evalua una expresión Booleana
IF (<expresion>)
BEGIN...
END
ELSE IF (<expresion>)
BEGIN...
END
Admite uso de subconsultas
Estructura CASE
Evalua una expresión y devuelve un valor
CASE <expresion>
WHEN <valor_expresion> THEN <valor_devuelto>
WHEN <valor_expresion> THEN <valor_devuelto>
ELSE <valor_devuelto>
END
Permite el uso de subconsultas
Estructura GOTO
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'
Se desaconseja el uso de GOTO y se recomienda el uso de TRY - CATCH