Вы находитесь на странице: 1из 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
!omo contadores" para contar el n#mero de veces que se realiza un bucle o
controlar cu$ntas veces debe ejecutarse.
%ara contener un dato que desea probar mediante una instrucci&n de control
de flujo.
%ara 'uardar un dato que se va a devolver en un c&di'o de retorno de un
procedimiento almacenado.
Declarar una variable.
La instrucci&n ()!L*+) inicializa una variable de Transact-SQL al
*si'nar un nombre. )l nombre debe tener un #nico , como primer car$cter.
*si'nar un tipo de datos suministrado por el sistema o definido por el
usuario y una lon'itud. %ara las variables num-ricas" se asi'nan tambi-n
una precisi&n y una escala.
)stablecer el valor a NULL.
Sintaxis:
()!L*+) ,nombre.variable tipo.dato /" 01
)l alcance de una variable es el conjunto de instrucciones de Transact-SQL desde
las que se puede 2acer referencia a la variable.
)l alcance de una variable se e3tiende desde el punto en el que se declara 2asta el
final del lote o procedimiento almacenado en el que se 2a declarado.
Asignar un valor en una variable.
!uando una variable se declara por primera vez" su valor se establece a NULL. %ara
asi'nar un valor a una variable" use la instrucci&n S)T. Tambi-n se puede asi'nar
un valor a una variable si se 2ace referencia a ella en la lista de selecci&n de una
instrucci&n S)L)!T.
%ara asi'nar un valor a una variable mediante la instrucci&n S)T" incluya el nombre
de la variable y el valor que desea asi'nar a la misma.
Sintaxis:
S)T ,nombre.variable 4 e3presi&n
Tambi-n es posible asi'nar un valor a una variable con la instrucci&n S)L)!T.
Ejemplos:
)n el si'uiente ejemplo declaramos la variable @id de tipo entera" en la primera
consulta obtenemos el c&di'o de la cate'ora Beverages y en la se'unda
Ing. Jaime Briones V.
jaimebv@gmai.com
!
Curso: Administracin de Base de Datos I Sesin 06
consulta usamos la variable @id para obtener todos los productos de la
cate'ora Beverages.
USE Northwind
DECLARE @Id int
SELECT @Id = CategoryID
FROM Categories
WERE CategoryNa!e = "#e$erages"
SELECT %rod&'tID( %rod&'tNa!e( CategoryID FROM %rod&'ts
WERE CategoryID = @Id
)l si'uiente es el conjunto de resultados
%rod&'tID %rod&'tNa!e CategoryID
))))))))))) )))))))))))))))))))))))))))))))))))))))) )))))))))))
* Chai *
+ Chang *
+, -&aran. Fant.sti'a *
/, Sas0&at'h A1e *
/2 Stee1eye Sto&t *
/3 C4te de #1aye *
/5 Chartre&se $erte *
,/ I6oh Co77ee *
89 La&ghing L&!:er;a'< Lager *
9= O&t:a'< Lager *
92 Rh>n:r?& @1oster:ier *
98 La<<a1i<>>ri *
A*+ rowAsB a77e'tedB
)ste ejemplo utiliza una variable local denominada ,find para recuperar
informaci&n de todos los autores cuyos apellidos comienzan con +in'.
USE 6&:s
DECLARE @7ind $ar'harA/=B
SET @7ind = "RingC"
SELECT a&D1na!e( a&D7na!e( 6hone
FROM a&thors
WERE a&D1na!e LI@E @7ind
)l si'uiente es el conjunto de resultados
a&D1na!e a&D7na!e 6hone
)))))))))))))))))))))))) )))))))))))))))))))) ))))))))))))
Ringer Anne 3=* 3+8)=92+
Ringer A1:ert 3=* 3+8)=92+
A+ rowAsB a77e'tedB
)ste ejemplo recupera nombres de empleados de los empleados de 5innet 6
7ardley 8pub_id 4 9:;;< contratados el = de enero de =>>? o posteriormente.
USE 6&:s
DECLARE @6&:Did 'harA,B( @hireDdate dateti!e
SET @6&:Did = "=399"
SET @hireDdate = "*E=*E5/"
SELECT 7na!e( 1na!e
FROM e!61oyee
Ing. Jaime Briones V.
jaimebv@gmai.com
"
Curso: Administracin de Base de Datos I Sesin 06
WERE 6&:Did = @6&:Did and hireDdate F= @hireDdate
)l si'uiente es el conjunto de resultados
7na!e 1na!e
)))))))))))))))))))) ))))))))))))))))))))))))))))))
Ana:e1a Do!ing&es
%a&1 enriot
A+ rowAsB a77e'tedB
Variables Globales
Las variables 'lobales son predefinidas y mantenidas por SQL Server. Los usuarios
no pueden asi'nar o cambiar directamente el valor de una variable 'lobal. @uc2as
de las variables 'lobales reportan la actividad que el sistema 2a tenido desde la
#ltima vez que se inici&A otras reportan informaci&n sobre la cone3i&n. Las variables
'lobales est$n precedidas por dos smbolos ,.
Las variables 'lobales son #tiles para verificar cierta informaci&n o condici&n del
entorno actual de SQL Server. %or ejemplo
Ejemplos:
Utilizar la variable @@versin para consultar la versi&n actual de SQL Server.
se1e't @@$ersion
)l si'uiente es el conjunto de resultados
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Mi'roso7t SGL Ser$er +==3 ARTMB ) *=H=H*8==H++ AI8,B J&1 5 +==3
*,K*9K,, Co6yright A'B *533)+==3 Mi'roso7t Cor6oration Enter6rise
Edition A8,):itB on Windows NT 8H* LI8,F A#&i1d 98=*K Ser$i'e %a'< *B
A* rowAsB a77e'tedB
)l si'uiente ejemplo trata de actualizar el precio de un producto que no e3iste y
lue'o se verifica si la instrucci&n se ejecut& satisfactoriamente comprobando el
valor de la variable 'lobal @@RowCount.
USE Northwind
U%DATE %rod&'ts
SET Unit%ri'e = Unit%ri'e M *H=
WERE %rod&'tID = 5=
IF A@@RowCo&nt = =B
#E-IN
%RINT "Ning&na Fi1a 7&e a't&a1iNada"
RETURN
END
)l si'uiente es el conjunto de resultados
A= rowAsB a77e'tedB
Ning&na Fi1a 7&e a't&a1iNada
Ing. Jaime Briones V.
jaimebv@gmai.com
#
Curso: Administracin de Base de Datos I Sesin 06
CO!ROL DE "L#$O
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
n#mero de veces que se debe ejecutar una o un 'rupo de instrucciones.
BEGI%ED
5)BCN y )N( se usan para a'rupar varias instrucciones de Transact-SQL en un
bloque l&'ico. Use 5)BCN y )N( en cualquier parte donde una instrucci&n de
control de flujo deba ejecutar un bloque con dos o m$s instrucciones de Transact-
SQL.
5)BCN y )N( se usan cuando
)s necesario que un bucle D7CL) incluya un bloque de instrucciones.
)s necesario que un elemento de una funci&n !*S) incluya un bloque de
instrucciones.
)s necesario que una cl$usula CE o )LS) incluya un bloque de instrucciones.
Sin&a'is:
#E-IN
HHH
HHH
END
I"
CE permite verificar una condici&n" y si su resultado es verdadero ejecuta una
instrucci&n o un bloque de instrucciones.
Sin&a'is:
)jecuta una instrucci&n si la condici&n es verdadera.
IF Condi'iOn
Instr&''iOn
)jecuta un bloque de instrucciones si la condici&n es verdadera.
IF Condi'iOn
#E-IN
Instr&''iOn
Instr&''iOn
HHH
END
Don(e:
Condicin" representa la e3presi&n l&'ica que debe ser evaluada y su valor es True
& Ealse.
Instruccin" representa la operaci&n que debe ser ejecutada.
Ing. Jaime Briones V.
jaimebv@gmai.com
$
Curso: Administracin de Base de Datos I Sesin 06
I". . . ELSE
La cl$usula )LS) en la instrucci&n CE permite definir una instrucci&n o un bloque de
instrucciones" que ser$ ejecutada cuando la condici&n da como resultado Ealse.
Sin&a'is:
IF Condi'iOn
Instr&''iOn
ELSE
Instr&''iOn
CASE
La funci&n !*S) es una e3presi&n especial de Transact-SQL que permite que se
muestre un valor alternativo dependiendo del valor de una columna. )ste cambio es
temporal" con lo que no 2ay cambios permanentes en los datos.
La funci&n !*S) acepta dos formatos que describiremos a continuaci&n.
"orma&o )
Sin&a'is:
CASE EP6resiOnEntrada
WEN EP6resiOnC&ando TEN EP6resiOnRes&1tado Q(RnS
QELSE EP6resiOnRes&1tadoE1seS
END
Don(e:
ExpresinEntrada" es la e3presi&n que eval#a la funci&n !*S).
ExpresinCuando" es la e3presi&n con la que es comparada la
)3presi&n)ntrada" sin son i'uales retorna la )3presi&n+esultado
correspondiente.
ExpresinResultado" es la e3presi&n que retorna la funci&n !*S) cuando la
)3presi&n!uando es i'ual a )3presi&n)ntrada.
ExpresinResultadoElse" es la e3presi&n que retorna cuando la
)3presi&n)ntrada no es i'ual con nin'una )3presi&n!uando.
Ejemplo:
)l si'uiente ejemplo muestra el primer da de la semana que se 2a establecido con
S)T (*T)EC+ST = para lunes" F para martes y as 2asta ; para el domin'o.
SELECT CASE @@DATEFIRST
WEN * TEN "L&nes"
WEN + TEN "Martes"
WEN / TEN "MiTr'o1es"
WEN , TEN "J&e$es"
WEN 2 TEN "Uiernes"
WEN 8 TEN "S.:ado"
WEN 9 TEN "Do!ingo"
ELSE "NONE"
END AS "*er dVa de 1a Se!ana"
Ing. Jaime Briones V.
jaimebv@gmai.com
%
Curso: Administracin de Base de Datos I Sesin 06
)l si'uiente es el conjunto de resultados
*er dVa de 1a Se!ana
))))))))))))))))))))
Do!ingo
A* rowAsB a77e'tedB
"orma&o *
Sin&a'is:
CASE EP6resiOn#oo1eana TEN EP6resiOnRes&1tado Q(RnS
QELSE EP6resiOnRes&1tadoE1seS
END
Don(e:
ExpresinBooleana" es la e3presi&n que eval#a la funci&n !*S)" si es
verdadera retorna la )3presi&n+esultado correspondiente.
ExpresinResultado" es la e3presi&n que retorna la funci&n !*S) cuando la
)3presi&n5ooleana es verdadera.
ExpresinResultadoElse" es la e3presi&n que retorna la funci&n !*S) cuando
nin'una )3presi&n5oolena es verdadera.
Ejemplo:
)l si'uiente ejemplo muestra un comentario acerca de los precios de los productos.
USE Northwind
SELECT %rod&'tNa!e( Unit%ri'e(
CASE
WEN Unit%ri'e L = TEN "%re'io Errado"
WEN Unit%ri'e L 3 TEN "Se 6&ede 'o!6rar"
WEN Unit%ri'e L *, TEN "Un 6o'o 'aro"
ELSE "#ien Caro"
END AS "%re'io"
FROM %rod&'ts
)l si'uiente es el conjunto de resultados
%rod&'tNa!e Unit%ri'e %re'io
))))))))))))))))))))))))))))))))))) ))))))))))))))) ))))))))))))))))
Chai *3H==== #ien Caro
Chang *5H==== #ien Caro
Aniseed Syr&6 *=H==== Un 6o'o 'aro
Che7 Anton"s Ca;&n Seasoning ++H==== #ien Caro
Che7 Anton"s -&!:o MiP +*H/2== #ien Caro
-rand!a"s #oysen:erry S6read +2H==== #ien Caro
Un'1e #o:"s Organi' Dried %ears /=H==== #ien Caro
Northwoods Cran:erry Sa&'e ,=H==== #ien Caro
Mishi @o:e Ni<& 59H==== #ien Caro
@on:& 8H==== Se 6&ede 'o!6rar
H
H
H
Origina1 Fran<7&rter grWne SoXe */H==== Un 6o'o 'aro
Ing. Jaime Briones V.
jaimebv@gmai.com
6
Curso: Administracin de Base de Datos I Sesin 06
A99 rowAsB a77e'tedB
+,ILE
)stablece una condici&n para la ejecuci&n repetida de una instrucci&n o bloque de
instrucciones de SQL. Las instrucciones se ejecutan repetidamente mientras la
condici&n especificada sea verdadera. Se puede controlar la ejecuci&n de
instrucciones en el bucle D7CL) con las palabras clave 5+)*G y !HNTCNU).
Sin&a'is:
WILE EP6resiOn#oo1eana
YInstr&''iOnSGL Z #1o0&eInstr&''iones[
Q#REA@S
YInstr&''iOnSGL Z #1o0&eInstr&''iones[
QCONTINUES
END
Don(e:
ExpresinBooleana" es una e3presi&n que devuelve T+U) 8verdadero< o
E*LS) 8falso<. Si )3presi&n5ooleana contiene una instrucci&n S)L)!T" esta debe
ir entre par-ntesis.
YInstr&''iOnSGL Z #1o0&eInstr&''iones[
Se trata de cualquier instrucci&n o 'rupo de instrucciones de Transact-SQL
definidos con un bloque de instrucciones.
BREAK" 2ace que se sal'a del bloque D7CL) m$s interno. Se ejecutan las
instrucciones que aparecen despu-s de la palabra clave )N(" que marca el final
del bucle.
CO!I"E# 2ace que se reinicie el bucle D7CL) y se omitan las instrucciones
que 2aya despu-s de la palabra clave !HNTCNU).
Ejemplo:
)l si'uiente ejemplo muestra los n#meros de = al =9.
DECLARE @Cont int
SET @Cont = *
WILE A@ContL=*=B
#E-IN
%rint @Cont
SET @Cont = @Cont M *
END
)l si'uiente es el conjunto de resultados
*
+
/
,
2
8
9
3
5
*=
Ing. Jaime Briones V.
jaimebv@gmai.com
&
Curso: Administracin de Base de Datos I Sesin 06
)l si'uiente ejemplo imprime los n#meros del = al =I" pero no incluye el I.
DECLARE @Cont int
SET @Cont = =
WILE EIISTSASELECT \B
#E-IN
SET @Cont = @Cont M *
IF A@Cont = 2B
CONTINUE
%rint @Cont
IF A@Cont = *2B
#REA@
END
)l si'uiente es el conjunto de resultados
*
+
/
,
8
9
3
5
*=
**
*+
*/
*,
*2
RE!#R
La instrucci&n +)TU+N termina incondicionalmente una consulta" procedimiento
almacenado o lote. Nin'una de las instrucciones de un procedimiento almacenado o
lote que si'a a la instrucci&n +)TU+N se ejecutar$.
Sin&a'is:
RETURN QEP6resiOnEnteraS
Don(e:
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 aplicaci&n.
Ejemplo:
)l si'uiente ejemplo por la condici&n del bucle debera imprimir los n#meros del
= al =I" pero el CE interno solo permite imprimir los n#meros del = al J.
DECLARE @Cont int
SET @Cont = =
WILE A@Cont L *2B
#E-IN
SET @Cont = @Cont M *
IF A@Cont = 2B
Ing. Jaime Briones V.
jaimebv@gmai.com
'
Curso: Administracin de Base de Datos I Sesin 06
RETURN
%rint @Cont
END
)l si'uiente es el conjunto de resultados
*
+
/
,
Ing. Jaime Briones V.
jaimebv@gmai.com
(

Вам также может понравиться