Está en la página 1de 9

Curso: Administracin de Base de Datos I

Sesin 06

VARIABLES Variables Locales


Una variable local de Transact-SQL es un objeto que contiene un dato individual de un tipo especfico. Normalmente las variables se utilizan en lotes y secuencias de comandos: Como contadores, para contar el nmero de veces que se realiza un bucle o controlar cuntas veces debe ejecutarse. Para contener un dato que desea probar mediante una instruccin de control de flujo. Para guardar un dato que se va a devolver en un cdigo de retorno de un procedimiento almacenado.

Declarar una variable.


La instruccin DECLARE inicializa una variable de Transact-SQL al: Asignar un nombre. El nombre debe tener un nico @ como primer carcter. Asignar un tipo de datos suministrado por el sistema o definido por el usuario y una longitud. Para las variables numricas, se asignan tambin una precisin y una escala. Establecer el valor a NULL. DECLARE @nombre_variable tipo_dato [, ] El alcance de una variable es el conjunto de instrucciones de Transact-SQL desde las que se puede hacer referencia a la variable. El alcance de una variable se extiende desde el punto en el que se declara hasta el final del lote o procedimiento almacenado en el que se ha declarado.

Sintaxis:

Asignar un valor en una variable.


Cuando una variable se declara por primera vez, su valor se establece a NULL. Para asignar un valor a una variable, use la instruccin SET. Tambin se puede asignar un valor a una variable si se hace referencia a ella en la lista de seleccin de una instruccin SELECT. Para asignar un valor a una variable mediante la instruccin SET, incluya el nombre de la variable y el valor que desea asignar a la misma. Sintaxis: SET @nombre_variable = expresin Tambin es posible asignar un valor a una variable con la instruccin SELECT.

Ejemplos:
En el siguiente ejemplo declaramos la variable @id de tipo entera, en la primera consulta obtenemos el cdigo de la categora Beverages y en la segunda

Ing. Jaime Briones V. jaimebv@gmail.com

Curso: Administracin de Base de Datos I consulta usamos la variable @id para obtener todos los productos de la categora Beverages. USE Northwind DECLARE @Id int SELECT @Id = CategoryID FROM Categories WHERE CategoryName = 'Beverages' SELECT ProductID, ProductName, CategoryID FROM Products WHERE CategoryID = @Id El siguiente es el conjunto de resultados: ProductID ----------1 2 24 34 35 38 39 43 67 70 75 76

Sesin 06

ProductName CategoryID ---------------------------------------- ----------Chai 1 Chang 1 Guaran Fantstica 1 Sasquatch Ale 1 Steeleye Stout 1 Cte de Blaye 1 Chartreuse verte 1 Ipoh Coffee 1 Laughing Lumberjack Lager 1 Outback Lager 1 Rhnbru Klosterbier 1 Lakkalikri 1

(12 row(s) affected) Este ejemplo utiliza una variable local denominada @find para recuperar informacin de todos los autores cuyos apellidos comienzan con Ring. USE pubs DECLARE @find varchar(30) SET @find = 'Ring%' SELECT au_lname, au_fname, phone FROM authors WHERE au_lname LIKE @find El siguiente es el conjunto de resultados: au_lname -----------------------Ringer Ringer (2 row(s) affected) Este ejemplo recupera nombres de empleados de los empleados de Binnet & Hardley (pub_id = 0877) contratados el 1 de enero de 1993 o posteriormente. USE pubs DECLARE @pub_id char(4), @hire_date datetime SET @pub_id = '0877' SET @hire_date = '1/01/93' SELECT fname, lname FROM employee WHERE pub_id = @pub_id and hire_date >= @hire_date 2 Ing. Jaime Briones V. jaimebv@gmail.com au_fname -------------------Anne Albert phone -----------801 826-0752 801 826-0752

Curso: Administracin de Base de Datos I El siguiente es el conjunto de resultados: fname -------------------Anabela Paul (2 row(s) affected) lname -----------------------------Domingues Henriot

Sesin 06

Variables Globales
Las variables globales son predefinidas y mantenidas por SQL Server. Los usuarios no pueden asignar o cambiar directamente el valor de una variable global. Muchas de las variables globales reportan la actividad que el sistema ha tenido desde la ltima vez que se inici; otras reportan informacin sobre la conexin. Las variables globales estn precedidas por dos smbolos @. Las variables globales son tiles para verificar cierta informacin o condicin del entorno actual de SQL Server. Por ejemplo:

Ejemplos:
Utilizar la variable @@versin para consultar la versin actual de SQL Server. select @@version El siguiente es el conjunto de resultados: ---------------------------------------------------------------------Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) Jul 9 2008 14:17:44 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (1 row(s) affected) El siguiente ejemplo trata de actualizar el precio de un producto que no existe y luego se verifica si la instruccin se ejecut satisfactoriamente comprobando el valor de la variable global @@RowCount. USE Northwind UPDATE Products SET UnitPrice = UnitPrice + 1.0 WHERE ProductID = 90 IF (@@RowCount = 0) BEGIN PRINT 'Ninguna Fila fue actualizada' RETURN END El siguiente es el conjunto de resultados: (0 row(s) affected) Ninguna Fila fue actualizada

Ing. Jaime Briones V. jaimebv@gmail.com

Curso: Administracin de Base de Datos I

Sesin 06

CONTROL DE FLUJO
Transact SQL proporciona un conjunto de palabras que forman parte del llamado Lenguaje de Control de Flujo, con el cual podemos controlar la secuencia y el nmero de veces que se debe ejecutar una o un grupo de instrucciones.

BEGINEND
BEGIN y END se usan para agrupar varias instrucciones de Transact-SQL en un bloque lgico. Use BEGIN y END en cualquier parte donde una instruccin de control de flujo deba ejecutar un bloque con dos o ms instrucciones de TransactSQL. BEGIN y END se usan cuando: Es necesario que un bucle WHILE incluya un bloque de instrucciones. Es necesario que un elemento de una funcin CASE incluya un bloque de instrucciones. Es necesario que una clusula IF o ELSE incluya un bloque de instrucciones.

Sintaxis:
BEGIN ... ... END

IF
IF permite verificar una condicin, y si su resultado es verdadero ejecuta una instruccin o un bloque de instrucciones.

Sintaxis:
Ejecuta una instruccin si la condicin es verdadera. IF Condicin Instruccin Ejecuta un bloque de instrucciones si la condicin es verdadera. IF Condicin BEGIN Instruccin Instruccin ... END

Donde:
Condicin, representa la expresin lgica que debe ser evaluada y su valor es True False. Instruccin, representa la operacin que debe ser ejecutada.

Ing. Jaime Briones V. jaimebv@gmail.com

Curso: Administracin de Base de Datos I

Sesin 06

IF. . . ELSE
La clusula ELSE en la instruccin IF permite definir una instruccin o un bloque de instrucciones, que ser ejecutada cuando la condicin da como resultado False.

Sintaxis:
IF Condicin Instruccin ELSE Instruccin

CASE
La funcin CASE es una expresin especial de Transact-SQL que permite que se muestre un valor alternativo dependiendo del valor de una columna. Este cambio es temporal, con lo que no hay cambios permanentes en los datos. La funcin CASE acepta dos formatos que describiremos a continuacin.

Formato 1 Sintaxis:
CASE ExpresinEntrada WHEN ExpresinCuando THEN ExpresinResultado [,n] [ELSE ExpresinResultadoElse] END

Donde:
ExpresinEntrada, es la expresin que evala la funcin CASE. ExpresinCuando, es ExpresinEntrada, sin correspondiente. la expresin son iguales con la que retorna la es comparada la ExpresinResultado

ExpresinResultado, es la expresin que retorna la funcin CASE cuando la ExpresinCuando es igual a ExpresinEntrada. ExpresinResultadoElse, es la expresin que retorna ExpresinEntrada no es igual con ninguna ExpresinCuando. cuando la

Ejemplo:
El siguiente ejemplo muestra el primer da de la semana que se ha establecido con SET DATEFIRST: 1 para lunes, 2 para martes y as hasta 7 para el domingo. SELECT CASE @@DATEFIRST WHEN 1 THEN 'Lunes' WHEN 2 THEN 'Martes' WHEN 3 THEN 'Mircoles' WHEN 4 THEN 'Jueves' WHEN 5 THEN 'Viernes' WHEN 6 THEN 'Sbado' WHEN 7 THEN 'Domingo' ELSE 'NONE' END AS '1er da de la Semana'

Ing. Jaime Briones V. jaimebv@gmail.com

Curso: Administracin de Base de Datos I El siguiente es el conjunto de resultados: 1er da de la Semana -------------------Domingo (1 row(s) affected)

Sesin 06

Formato 2 Sintaxis:
CASE ExpresinBooleana THEN ExpresinResultado [,n] [ELSE ExpresinResultadoElse] END

Donde:
ExpresinBooleana, es la expresin que evala la funcin CASE, si es verdadera retorna la ExpresinResultado correspondiente. ExpresinResultado, es la expresin que retorna la funcin CASE cuando la ExpresinBooleana es verdadera. ExpresinResultadoElse, es la expresin que retorna la funcin CASE cuando ninguna ExpresinBoolena es verdadera.

Ejemplo:
El siguiente ejemplo muestra un comentario acerca de los precios de los productos. USE Northwind SELECT ProductName, UnitPrice, CASE WHEN UnitPrice < 0 THEN 'Precio Errado' WHEN UnitPrice < 8 THEN 'Se puede comprar' WHEN UnitPrice < 14 THEN 'Un poco caro' ELSE 'Bien Caro' END AS 'Precio' FROM Products El siguiente es el conjunto de resultados: ProductName UnitPrice Precio ----------------------------------- --------------- ---------------Chai 18.0000 Bien Caro Chang 19.0000 Bien Caro Aniseed Syrup 10.0000 Un poco caro Chef Anton's Cajun Seasoning 22.0000 Bien Caro Chef Anton's Gumbo Mix 21.3500 Bien Caro Grandma's Boysenberry Spread 25.0000 Bien Caro Uncle Bob's Organic Dried Pears 30.0000 Bien Caro Northwoods Cranberry Sauce 40.0000 Bien Caro Mishi Kobe Niku 97.0000 Bien Caro Konbu 6.0000 Se puede comprar . . . Original Frankfurter grne Soe 13.0000 Un poco caro (77 row(s) affected) 6 Ing. Jaime Briones V. jaimebv@gmail.com

Curso: Administracin de Base de Datos I

Sesin 06

WHILE
Establece una condicin para la ejecucin repetida de una instruccin o bloque de instrucciones de SQL. Las instrucciones se ejecutan repetidamente mientras la condicin especificada sea verdadera. Se puede controlar la ejecucin de instrucciones en el bucle WHILE con las palabras clave BREAK y CONTINUE.

Sintaxis:
WHILE ExpresinBooleana {InstruccinSQL | BloqueInstrucciones} [BREAK] {InstruccinSQL | BloqueInstrucciones} [CONTINUE] END

Donde:
ExpresinBooleana, es una expresin que devuelve TRUE (verdadero) o FALSE (falso). Si ExpresinBooleana contiene una instruccin SELECT, esta debe ir entre parntesis. {InstruccinSQL | BloqueInstrucciones} Se trata de cualquier instruccin o grupo de instrucciones de Transact-SQL definidos con un bloque de instrucciones. BREAK, hace que se salga del bloque WHILE ms interno. Se ejecutan las instrucciones que aparecen despus de la palabra clave END, que marca el final del bucle. CONTINUE, hace que se reinicie el bucle WHILE y se omitan las instrucciones que haya despus de la palabra clave CONTINUE.

Ejemplo:
El siguiente ejemplo muestra los nmeros de 1 al 10. DECLARE @Cont int SET @Cont = 1 WHILE (@Cont<=10) BEGIN Print @Cont SET @Cont = @Cont + 1 END El siguiente es el conjunto de resultados: 1 2 3 4 5 6 7 8 9 10

Ing. Jaime Briones V. jaimebv@gmail.com

Curso: Administracin de Base de Datos I

Sesin 06

El siguiente ejemplo imprime los nmeros del 1 al 15, pero no incluye el 5. DECLARE @Cont int SET @Cont = 0 WHILE EXISTS(SELECT *) BEGIN SET @Cont = @Cont + 1 IF (@Cont = 5) CONTINUE Print @Cont IF (@Cont = 15) BREAK END

El siguiente es el conjunto de resultados: 1 2 3 4 6 7 8 9 10 11 12 13 14 15

RETURN
La instruccin RETURN termina incondicionalmente una consulta, procedimiento almacenado o lote. Ninguna de las instrucciones de un procedimiento almacenado o lote que siga a la instruccin RETURN se ejecutar.

Sintaxis:
RETURN [ExpresinEntera]

Donde:
ExpresinEntera, es el valor entero que se devuelve. Los procedimientos almacenados pueden devolver un valor entero al procedimiento que realiza la llamada o a una aplicacin.

Ejemplo:
El siguiente ejemplo por la condicin del bucle debera imprimir los nmeros del 1 al 15, pero el IF interno solo permite imprimir los nmeros del 1 al 4. DECLARE @Cont int SET @Cont = 0 WHILE (@Cont < 15) BEGIN SET @Cont = @Cont + 1 IF (@Cont = 5) RETURN Print @Cont 8 Ing. Jaime Briones V. jaimebv@gmail.com

Curso: Administracin de Base de Datos I

Sesin 06

END El siguiente es el conjunto de resultados: 1 2 3 4

Ing. Jaime Briones V. jaimebv@gmail.com

También podría gustarte