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

r

CASE <expresion>       WHEN <valor_expresion> THEN <valor_devuelto>       WHEN <valor_expresion> THEN <valor_devuelto>       ELSE <valor_devuelto> -- Valor por defecto   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