Beruflich Dokumente
Kultur Dokumente
Variables locales
Una variable es un objeto que puede tomar un valor. Se pueden utilizar variables locales para
introducir datos en una sentencia SQL. En T-SQL, se pueden crear variables locales para uso
temporal, mientras se ejecutan un bloque de sentencias SQL. Una vez la variable es declarada,
Una sentencia SQL puede establecer un valor para la variable. La siguiente sentencia en el
bloque puede recuperar el valor de la variable, y mostrar el resultado.
El nombre de una variable local debe tener como prefijo el smbolo @.
Sintaxis:
DECLARE @nombre_variable DATA_TYPE
Por ejemplo para declarar una variable que contendr 4 caracteres, el comando podra ser
como sigue:
DECLARE @area Char(4)
Se puede utilizar la sentencia SET, o la sentencia SELECT para asignar un valor a una variable
declarada.
Sintaxis:
SET @nombre_variable = valor o SELECT @nombre_variable = value
Ej: DECLARE @area Char(4)
SET @area = SUR2 --Para asignar un valor a la variable
DECLARE @area Char(4)
SET @area = SUR2
SELECT * FROM clientes
WHERE codigo_area = @area
--Para usar la variable dentro de un Query.
SQL Server provee la construccin de programas que le permitan actuar de forma selectiva sobre un grupo de
sentencias DML. Para realizar estas tareas, las estructuras de control de flujo usan tcnicas como el ciclo, o
condicionales. Estas tcnicas son similares a las encontradas en lenguajes de programacin tales como Visual
Basic o C++.
Cuando usted ejecuta un programa, las sentencias son ejecutadas secuencialmente. Para controlar la ejecucin
del flujo del programa se usan las sentencias de control.
TS-SQL permite controlar el flujo de ejecucin y almacenar procedimientos, a continuacin se revisarn las
principales estructuras:
RETURN: Sintaxis:
RETURN [expresin entera]
Se puede utilizar en cualquier punto para salir de un
bloque T-SQL o de un procedimiento almacenado. La expresin entera especifica un valor entero que se
Las instrucciones despus del RETURN, no se retorna. Por defecto, todos los procedimientos
ejecutan. almacenados del sistema retornan un zero o non-
zero para indicar que la ejecucin fue exitosa o no.
GOTO: Sintaxis:
GOTO etiqueta
Se utiliza para cambiar el flujo de ejecucin a una
ubicacin especificada (label). Las sentencias El nombre de la etiqueta debe seguir las reglas de los
despus del GOTO son saltadas. Se pueden utilizar nombres de identificadores. procedimientos
mltiples saltos. almacenados del sistema retornan un zero o non-
zero para indicar que la ejecucin fue exitosa o no.
WHILE: Sintaxis:
WHILE condicin
Se pueden ejecutar una sentencia o un bloque de { Sentencias | bloque de sentencias}
sentencias basados en una condicin. Las [BREAK]
sentencias son ejecutadas repetidamente mientras
que la condicin especificada sea verdadera. Se { Sentencias | bloque de sentencias}
utiliza CONTINUE y BREAK para controlar la [CONTINUE]
ejecucin de la sentencias.
break: rompe el ciclo al bloque inmediatamente
externo.
Continue: Reinicia el loop.
IF ELSE: Sintaxis:
IF condicin
Se pueden ejecutar una sentencia o un bloque de { Sentencias | bloque de sentencias}
sentencias basados en una condicin. Las ELSE
sentencias son ejecutadas si la condicin se cumple,
en caso contrario se ejecutan las sentencias { Sentencias | bloque de sentencias}
especificadas despus del ELSE. No hay lmites en el uso de IF anidados
CASE: Sintaxis:
CASE
Permite retornar un valor basado en de sentencias WHEN condicin THEN expresiones
basados en una condicin. Las sentencias son [ WHEN condicin2 THEN expresiones]
ejecutadas si la condicin se cumple, en caso
contrario se ejecutan las sentencias especificadas [ ELSE]]
despus del ELSE. END
WAITFOR : Sintaxis:
Se puede especificar un tiempo, intervalo de tiempo, WAITFOR { DELAY tiempo | TIME tiempo
o evento que genera la ejecucin de un bloque de
sentencias, procedimiento almacenado o transaccin.
Delay: Detiene el procesamiento el tiempo
especificado.
Time: Especifica en qu momento se ejecuta.
PROCEDIMIENTOS ALMACENADOS
Un procedimiento almacenado (stored procedure) no es ms que una coleccin de sentencias Transact-SQL que
se constituye como si de una funcin de un lenguaje estructurado(C, Pascal) se tratase. Es decir, es posible
llamarlo mediante un identificador, puede recibir argumentos y devolver un valor de retorno.
La caracterstica primordial de los procedimientos almacenados es que se optimizan en el momento de su
creacin. Esto supone que, a diferencia de lo que sucede con las sentencias SQL que se envan al gestor de
manera interactiva, los procedimientos almacenados pasan previamente por un proceso de normalizacin.
Cuando se crea un procedimiento almacenado el procesador de consultas del gestor crea una versin del mismo
con una cierta estructura normalizada, y la almacena en una de las tablas del sistema. Las siguientes ejecuciones
de dicho procedimiento, no necesitarn consumir el tiempo necesario para llevar a cabo este proceso de
normalizacin, con lo que su ejecucin ser ms rpida.
Por otra parte, cuando el procedimiento se ejecuta por primera vez, se produce su compilacin y la optimizacin
del acceso del procedimiento a los datos. Este proceso optimizado y compilado, denominado plan, se mantiene en
memoria, en la cache de procedimientos, para posteriores ejecuciones con el consiguiente ahorro adicional de
tiempo y recursos.
Caractersticas bsicas
Se utiliza la sentencia CREATE PROCEDURE. Todos los procedimientos almacenados son creados en la base de
datos actual, para crear el procedimiento se requiere tener permisos de ejecucin de procedimientos almacenados.
Sintaxis:
CREATE PROC[EDURE] nombre_procedimiento
Sintaxis:
EXEC[UTE] nombre_procedimiento
EXEC Productos_silla
Se pueden utilizar parmetros dentro del procedimiento para recibir o retornar valores.
Sintaxis:
CREATE PROCEDURE nombre_procedimiento
@nombre_parametro tipo_dato
AS
Por ejemplo, para utilizar un procedimiento que nos muestre los datos de los productos con determinado nombre,
se enviara como parmetro el nombre del producto As:
Se pueden ejecutar comandos del sistema operativo a travs de XP_cmdshell, su estructura es:
EXEC xp_cmdshell 'comando del S.O. ', no_output
Use master
Declare @datos int
EXEC @datos = xp_cmdshell ' dir *.exe'
If (@datos = 0)
PRINT 'Comando ejecutado con xito'
ELSE
PRINT 'Fallo al ejecutar el comando'
Funciones escalares.
Funciones en lnea.
Funciones escalares
Las funciones escalares devuelven un nico valor de cualquier tipo de los datos
tal como int, money, varchar, real, etc.
-- Lista de parmetros
)
-- Tipo de datos que devuelve la funcin.
AS
BEGIN
...
END
@NumCuenta VARCHAR(20),
@Multiplicador DECIMAL(10,2)
RETURNS DECIMAL(10,2)
AS
BEGIN
@Return DECIMAL(10,2)
FROM CUENTAS
RETURN @Return
END
SELECT IDCUENTA,
NUMCUENTA,
SALDO,
FXALTA,
-- Ejecucion de la funcion:
FROM CUENTAS
El siguiente ejemplo muestra como utilizar una funcin escalar en un script Transact SQL.
@Resultado DECIMAL(10,2)
PRINT @Resultado
Las funciones escalares son muy similares a procedimientos almacenados con parmetros de
salida, pero estas pueden ser utilizadas en consultas de seleccion y en la clausula where de
las mismas.
Funciones en linea
Las funciones en linea son las funciones que devuelven un conjunto de resultados
correspondientes a la eecucin de una sentencia SELECT.
-- Lista de parmetros
RETURNS TABLE
AS
RETURN
@NumCuenta VARCHAR(20)
RETURNS TABLE
AS
RETURN
SELECT MOVIMIENTOS.*
FROM MOVIMIENTOS
Las funciones en linea pueden utilizarse dentro de joins o querys como si fueran una tabla
normal.
SELECT *
FROM CUENTAS
Este tipo de funcin se usa en situaciones donde se requiere una mayor lgica de
proceso.
-- Lista de parmetros
RETURNS
-- variable de tipo tabla y su estructura
AS
BEGIN
RETURN
END
* de estas cuentas
*/
NumCuenta varchar(20),
Saldo decimal(10,2),
Saldo_anterior decimal(10,2),
Saldo_posterior decimal(10,2),
Importe_Movimiento decimal(10,2),
FxMovimiento datetime
)
AS
BEGIN
@numcuenta varchar(20),
@saldo decimal(10,2)
FROM CUENTAS
OPEN CDATOS
-- Recorremos el cursor
WHILE (@@FETCH_STATUS = 0)
BEGIN
(NumCuenta, Saldo)
VALUES
(@numcuenta, @saldo)
SELECT TOP 3
SALDO_ANTERIOR, SALDO_POSTERIOR,
IMPORTE, FXMOVIMIENTO
FROM MOVIMIENTOS
END
CLOSE CDATOS;
DEALLOCATE CDATOS;
RETURN
END