- Declare Table
Mediante esta sentencia, se pueden crear tablas temporales en memoria, y posteriormente manipularlas como si fueran tablas normales.
Sintaxis:
Declare @Tabla Table (Campo1 tipo, Campo2 tipo, Campo3 tipo...)
Estas tablas temporales solamente sirven para el momento de la ejecución, si se intentan utilizar en otro momento el sistema no las reconocerá.
El siguiente ejemplo crea la tabla temporal y después inserta en ella:
Declare @Emp Table (Emp_no int Primary Key, Apellidos nvarchar(25), Salario Int) Insert Into @Emp Select Emp_No, Apellido, Salario from Emp Select * from @Emp
- FUNCIONES DE USUARIO
Una función de usuario, se crea con el fin de automatizar una consulta que se realiza a menudo. Pueden usar uno o más parámetros de entrada y devuelven un valor o varios resultados. Existen dos tipos de funciones:
- Escalares
Devuelven un solo valor.
Sintaxis:
Create Function NombreFunción (@Parámetro1 tipo, @Parámetro 2 tipo...) Returns Tipo As Begin Sentencias End
Ejemplo:
Create Function SalmedioDep (@Deptno int) Returns int As Begin Return(Select avg(salario) from Emp Where Dept_no = @Deptno) End
Esta función devuelve el salario medio del departamento indicado.
Para ver si la función se ha creado, consultamos en la siguiente ruta del árbol "Hospital_BD > Programación > Funciones > Funciones Escalares". Si la función no aparece, pulsamos F5 para que refresque.
select * from Emp where salario > dbo.salmediodep(30) and dept_no <> 30
Como vemos en el ejemplo, cuando ejecutemos la función hemos de poner también el usuario al que pertenece, en este caso es el dbo.
- Tabla
Estas funciones devuelven una tabla.
Sintaxis:
Create Function NombreFunción(Parámetro1 tipo, Parámetro2 tipo...) Returns Table As Return(Sentencias) / Sentencias Return
Como vemos, en la sintaxis, esta sentencia puede construirse de diferentes maneras. Return indica que tiene que devolver un valor. Usaremos una sintaxis u otra en los siguientes casos:
Si tenemos que hacer una sola sentencia o una sentencia anidada, usaremos Return (Sentencia / Sentencias anidadas) en cambio si dependiendo de una serie de condiciones controladas mediante if, when, etc. realizamos unas sentencias u otras, incluiremos Return al final del todo.
Ejemplo 1:
Create Function Emp_Dept (@Ndept nvarchar(20)) Returns Table As Return(Select Emp_No, Apellido, Salario, DNombre From Emp Inner Join Dept On Dept.Dept_no = Emp.Dept_no where DNombre = @NDept)
Después tratamos la función como si fuera una tabla, ej:
Select * from Emp_Dept ('Ventas')
En este caso introducimos como valor Ventas, y vemos como obtenemos todos los empleados del departamento indicado.
Ejemplo 2:
Create Function Emp_Dept2(@ndept nvarchar(20)) Returns @Emp Table(Emp_no int, Apellido nvarchar(20), Salario int, Dnombre nvarchar(20)) As Begin Insert Into @Emp Select Emp_no, Apellido, Salario, Dnombre from Emp Inner Join Dept On Dept.Dept_no = Emp.Dept_no where Dnombre = @NDept Return End
Select * from Emp_dept2 ('Ventas')
- Drop Function
Borra una o varias funciones.
Sintaxis:
Drop Function Funcion1, Funcion2 etc.
Ejemplo:
Drop Function SalMedioDep, Emp_Dept, Emp_Dept2
Espero haber ayudado en algo. Hasta la próxima oportunidad!
Twittear
No hay comentarios:
Publicar un comentario