En el contexto de Transact SQL, las estructuras de control son fundamentales para dirigir el flujo de ejecución de las sentencias. Una de las estructuras más utilizadas es la condicional CASE, que permite evaluar una expresión y devolver distintos valores según las condiciones especificadas.
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' RETURNerror: PRINT 'Se ha producido una division por cero'
Bucle WHILE
El bucle mientras expresion se evalue como verdadero
DECLARE @coRecibo int WHILE EXISTS (SELECT * FROM RECIBOS WHERE PENDIENTE = 'S')-- Ojo, la subconsulta se ejecuta-- una vez por cada iteracion -- del bucle! BEGIN SET @coRecibo = (SELECT TOP 1 CO_RECIBOFROM RECIBOS WHERE PENDIENTE = 'S') UPDATE RECIBOS SET PENDIENTE = 'N' WHERE CO_RECIBO = @coRecibo END
DECLARE @contador int SET @contador = 0 WHILE (1 = 1) BEGIN SET @contador = @contador + 1IF (@contador % 50 = 0) BREAK PRINT 'Iteracion del bucle ' + cast(@contador AS varchar) END
DECLARE @contador int SET @contador = 0 WHILE (@contador < 100) BEGIN SET @contador = @contador + 1IF (@contador % 2 = 0) CONTINUE PRINT 'Iteracion del bucle ' + cast(@contador AS varchar) END
DECLARE @Web varchar(100), @diminutivo varchar(3)
SET @diminutivo = ‘UISRAEL' SET @Web = (CASE @diminutivo WHEN ‘UISRAEL' THEN 'www.uisrael.edu.ec' WHEN ‘UTE' THEN 'www.ute.edu.ec' ELSE 'www.uisrael.edu.ec' END)
PRINT @Web
WHILE
BEGIN
...
END
Estructura condicional CASE
Evaluar una expresion y devolver un valor u otro.
DECLARE @Web varchar(100), @diminutivo varchar(3)
SET @diminutivo = 'DJK' SET @Web = (CASE WHEN @diminutivo = ‘UISRAEL' THEN (SELECT web FROM WEBS WHERE id=1) WHEN @diminutivo = ‘UTE' THEN (SELECT web FROM WEBS WHERE id=2) ELSE 'www.uisrael.edu.ec' END)
PRINT @Web
CASE WHEN = THEN WHEN = THEN ELSE -- Valor por defecto END
DECLARE @Web varchar(100), @diminutivo varchar(3)
SET @diminutivo = ‘UISRAEL' SET @Web = (CASE @diminutivo WHEN ‘UISRAEL' THEN 'www.uisrael.edu.ec' WHEN ‘UTE' THEN 'www.ute.edu.ec' ELSE 'www.uisrael.edu.ec' END)
PRINT @Web
CASE WHEN THEN WHEN THEN ELSE -- Valor por defecto END
Estructura condicional IF
Evaluar una expresion booleana (resultado SI - NO), y ejecutar las operaciones contenidas en el bloque formado por BEGIN END.
DECLARE @coPais int, @descripcion varchar(255)set @coPais = 5set @descripcion = ‘USA’
IF EXISTS(SELECT * FROM PAISES WHERE CO_PAIS = @coPais) BEGIN UPDATE PAISES SET DESCRIPCION = @descripcion WHERE CO_PAIS = @coPaisENDELSEBEGIN INSERT INTO PAISES (CO_PAIS, DESCRIPCION) VALUES (@coPais, @descripcion)END
DECLARE @Web varchar(100), @diminutivo varchar(3) SET @diminutivo = ‘UISRAEL' IF @diminutivo = ‘UISRAEL' BEGIN PRINT 'www.uisrael.edu.ec' END ELSE BEGIN PRINT 'Otra Web' END
IF ()
BEGIN
...
END
ELSE IF ()
BEGIN
...
END
ELSE
BEGIN
...
END