SQL Server 2008 admite las funciones definidas por el
usuario y las funciones del sistema integradas. Al igual que las funciones en
los lenguajes de programación, las funciones definidas por el usuario de son
rutinas que aceptan parámetros, realizan una acción, como un cálculo complejo,
y devuelven el resultado de esa acción como un valor. El valor devuelto puede
ser un valor escalar único o un conjunto de resultados.
Funciones
escalares.
Las funciones escalares son las más parecidas a las
funciones que se utilizan dentro de los lenguajes de programación. Se utilizan básicamente
para cálculos básicos matemáticos ya que devuelven un único valor escalar.
ejemplo: Calculo del IVA:
--Creamos la
funcion conel nombre IVA
-- Indicamos el
parámetro de entrada y tipo: @cantidad money
Create function IVA (@cantidad money)
Returns money -- Indicamos el tipo
de parámetros que retornará la función.
as
-- Encapsulamos el
conjunto de funciones dentro de un Begin y un end.
Begin
-- Dentro de la
sentencia o funcion podemos manejar variables
--aunque puede no ser necesario para ser más
eficiente la función.
-- por cuestiones de
ejemplo usamos la variable @resultado
Declare @resultado money
set @resultado = @cantidad * 0.16
-- Cuando
terminamos la función ponemos el Return
Return (@resultado) -- Y la variable que
devolverá la función @resultado.
end
Para llamar a la función
la llamamos con un nombre de dos partes, con el esquema.funcion mas el parametro
que requiere la funcion:
Select campo_producto, campo_unidadprecio, dbo.iva(campo_unidadprecio) as iva from tabla
Funciones
con valores de tabla de varias instrucciones y Funciones con valores de tablas
en línea
A groso modo
y solo para simplificar, son un hibrido entre vista y procedimiento almacenado,
ya que suelen ser consultas con una instrucción select, pero que pueden recibir
parámetros, cosa que no puede hacer una vista y si un procedimiento desde la
versión sql server 2008 en adelante. Un procedimiento almacenado es más
poderoso, ya que puede encapsular insert, update, delete o un conjunto de
instrucciones SQL… De todas formas si se puede… recomiendo que se trabajes con
procedimientos almacenados en lugar de con funciones, dentro de lo
posible... ya que desde sql 2008 se puedes pasar variables tipo tabla (arrays)
a procedimientos almacenados... (http://microsoftsqlsecret.fullblog.com.ar/stored-procedure-with-array-parameters-como-pasamos-variables-tipo-ta.html)
Funciones
con valores de tabla de varias instrucciones:
--Creamos una
función que se le ingrese por parámetro el país y devuelva los clientes de ese
país:
Create function ListadoPais (@pais varchar(100))
returns @clientes table -- Decimos que retornamos como resultado una variable de
tipo tabla y la declaramos
(customerid varchar(5), companyname varchar(50), -- Se definen las
columnas que se necesiten
contactname varchar(100), country varhcar(100)
)
as
-- Iniciamos la
función. La variable tipo tabla @clientes es la que vamos a devolver como
resultado de la función
begin
Insertamos a la variabla tipo tabla @clientes:
Insert @clientes select customerid, companyname,
contactname, country from customers where country = @pais -- variable @pais de
entrada en la función
Return
end
Para ver la función
funcionando:
Select * from dbo.ListadoPais('Argentina')
Funciones
con valores de tablas en línea:
A diferencia de la anterior (funciones con valores de
tabla), es una función con valores de tabla en línea.
Create funcion ListadoPais2 (@pais varchar(100))
returns table
as
return
(
select customerid, companyname,
contactname, country from customers where country = @pais
)
Conceptos básicos de las funciones definidas por el
usuario -> http://msdn.microsoft.com/es-es/library/ms191007.aspx
Descripción de funciones definidas por el usuario
-> http://msdn.microsoft.com/es-es/library/ms190704.aspx
Tipos de funciones -> http://msdn.microsoft.com/es-es/library/ms177499.aspx
Apunte
y recopilación por Norman M. Pardell
Puedes
consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea
posible.