Estructuras de control en Transact SQL
Estructura condicional IF
Evaluar una expresion booleana (resultado SI - NO), y ejecutar las operaciones contenidas en el bloque formado por BEGIN END.
IF (<expresion>)
BEGIN
...
END
ELSE IF (<expresion>)
BEGIN
...
END
ELSE
BEGIN
...
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
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
Estructura condicional CASE
Evaluar una expresion y devolver un valor u otro.
CASE <expresion> WHEN <valor_expresion> THEN <valor_devuelto> WHEN <valor_expresion> THEN <valor_devuelto> ELSE <valor_devuelto> -- 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 <expresion> = <valor_expresion> THEN <valor_devuelto> WHEN <expresion> = <valor_expresion> THEN <valor_devuelto> ELSE <valor_devuelto> -- Valor por defecto END
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
Bucle WHILE
El bucle mientras expresion se evalue como verdadero
WHILE <expresion>
BEGIN
...
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
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 @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 @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
Estructura GOTO
desviar el flujo de ejecución hacia una etiqueta
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'