EJEMPLO
PERMITE
subconsultas
 BREAK
CONTINUE.
EJEMPLO
EXPLESION
REPITE
subconsultas
Otra sintaxis de CASE nos permite evaluar diferentes expresiones:
Ejemplo de CASE.
La sintaxis general de case es:
PERMITE
uso de subconsultas
Ejemplo de la estructura
EXPRESIÒN
PERMITE
Estructuras de control en Transact SQL

Estructuras de control en Transact SQL

Estructura condicional IF

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 = 5 set @descripcion = ‘USA’

IF EXISTS(SELECT * FROM PAISES WHERE CO_PAIS = @coPais) BEGIN UPDATE PAISES SET DESCRIPCION = @descripcion WHERE CO_PAIS = @coPais END ELSE BEGIN INSERT INTO PAISES (CO_PAIS, DESCRIPCION) VALUES (@coPais, @descripcion) END

Estructura condicional CASE

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

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 + 1 IF (@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 + 1 IF (@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_RECIBO FROM RECIBOS WHERE PENDIENTE = 'S')         UPDATE RECIBOS         SET PENDIENTE = 'N'         WHERE CO_RECIBO = @coRecibo     END

Estructura GOTO

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'     RETURN error:     PRINT 'Se ha producido una division por cero'