Академический Документы
Профессиональный Документы
Культура Документы
Sólo pueden crearse vistas en la base de datos activa, aunque las tablas
y/o vistas que son parte de la definición puedan encontrarse en distintas
bases de datos.
Se pueden crear vistas a partir de otras vistas.
No se pueden asociar defaults, rule y/o desencadenadores (Trigers) a una
vista.
La consulta que forma la vista no puede incluir las cláusulas ORDER BY,
COMPUTE o COMPUTE BY
No se pueden construir índices sobre las vistas
No se pueden crear vistas temporales, ni vistas basadas en tablas
temporales.
Cada una de las columnas empleadas en la vista debe tener un
encabezado.
Crear una Vista
Para crear vistas lo podemos hacer desde el
administrador corporativo o a partir de la sentencia
CREATE VIEW, cuya sintaxis es:
Sp_HelpText Resumen
GO
Sentencias SELECT
RETURNS int
AS
BEGIN
DECLARE
*agregamos las variables que necesitemos para realizar la funcion
@Period int
SELECT @Period = (
CASE
WHEN @DateType = 'year' THEN datepart(year,@Date)
WHEN @DateType = 'month' THEN datepart(month,@Date)
WHEN @DateType = 'quarter' THEN datepart(quarter,@Date)
WHEN @DateType = 'semester' THEN
(CASE
WHEN datepart(month,@Date) between 1 and 6
THEN '1'
WHEN datepart(month,@Date) between 7 and 12
THEN '2'
END
)
ELSE
'0'
END)
*Retorno el valor
RETURN @Period
END
Ejemplo 4
Create function NumeroALetra(@numero int )
returns varchar(200)
as
begin
Declare @rango int
Declare @Resultado varchar(200)
Declare @ResultAux varchar(200)
Declare @aux varchar(20)
set @resultado=''
set @resultaux=''
set @aux =convert(varchar,@numero)
Set @rango= len(@aux)
Si estamos por encima de 1000000 todo vuelve a ser igual que por debajo.
Trescientos cincuenta y un mil cuatrocientos treinta millones doscientas cincuenta mil tres
Select nombreusuario.nombrefunción(valores)
Funciones escalares.
Funciones en línea.
Funciones en línea de múltiples sentencias
Funciones escalares
Para
utilizar una función escalar debemos identificar el
nombre de la función con el propietario de la misma.
RETURNS DECIMAL(10,2)
AS
BEGIN
RETURN @Return
END
Ejecución Funciones Escalares
La función ejecutará sus sentencias SELECT una vez por cada
fila del conjunto de resultados devuelto por la consulta
SELECT principal.
-- Ejecucion de la funcion:
FROM CUENTAS
Ejemplo en un script
DECLARE @NumCuenta VARCHAR(20),
@Resultado DECIMAL(10,2)
PRINT @Resultado
Funciones en linea
Lasfunciones en línea son las funciones que devuelven un
conjunto de resultados correspondientes a la ejecución
de una sentencia SELECT.
Las
funciones en línea pueden utilizarse dentro de joins o
querys como si fueran una tabla normal.
Sintaxis
CREATE FUNCTION <Inline_Function_Name, sysname, FunctionName>
(-- Lista de parámetros
<@param1, sysname, @p1> <Data_Type_For_Param1, , int>,...
)
RETURNS TABLE
AS
RETURN
)
Ejemplo
CREATE FUNCTION fn_MovimientosCuenta
( @NumCuenta VARCHAR(20) )
RETURNS TABLE
AS
RETURN
(
SELECT MOVIMIENTOS.*
FROM MOVIMIENTOS
RETURNS
-- variable de tipo tabla y su estructura
<@Table_Variable_Name, sysname, @Table_Var> TABLE
(
<Column_1, sysname, c1> <Data_Type_For_Column1, , int>,
<Column_2, sysname, c2> <Data_Type_For_Column2, , int>
)
AS
BEGIN
-- Sentencias que cargan de datos la tabla declarada
RETURN
END
Ejemplo
Esta funcion busca la tres cuentas con mayor saldo y obtiene los tres últimos movimientos de cada una de éstas :
NumCuenta varchar(20),
Saldo decimal(10,2),
Saldo_anterior decimal(10,2),
Saldo_posterior decimal(10,2),
Importe_Movimiento decimal(10,2),
FxMovimiento datetime
)
Ejemplo
AS
BEGIN
@numcuenta varchar(20),
@saldo decimal(10,2)
FROM CUENTAS
-- Recorremos el cursor
WHILE (@@FETCH_STATUS = 0)
BEGIN
(NumCuenta, Saldo)
VALUES
(@numcuenta, @saldo)
SELECT TOP 3
SALDO_ANTERIOR, SALDO_POSTERIOR,
IMPORTE, FXMOVIMIENTO
FROM MOVIMIENTOS
WHERE IDCUENTA = @idcuenta
ORDER BY FXMOVIMIENTO DESC
-- Vamos a la siguiente cuenta
FETCH CDATOS INTO @idcuenta, @numcuenta, @saldo
END
CLOSE CDATOS;
DEALLOCATE CDATOS;
RETURN
END
Ejecución
select * from fn_CuentaMovimietos()