Funciones en SQL
Una función es un conjunto de sentencias que operan como una unidad lógica.
Una función tiene un nombre, retorna un parámetro de salida y opcionalmente acepta parámetros de entrada. Las funciones de SQL Server no pueden ser modificadas, las funciones definidas por el usuario si.
click to edit
Hay tres tipos de funciones definidas por el usuario en SQL Server:
Funciones escalares (devuelve un valor único)
Funciones de valor de tabla en línea (contiene una sola instrucción TSQL y devuelve un conjunto de tabla)
Funciones de valor de tabla de múltiples declaraciones (contiene varias declaraciones TSQL y devuelve el conjunto de tablas)
Las funciones escalares definidas por el usuario devuelven un único valor de datos del tipo definido en la cláusula RETURNS. En una función escalar insertada no hay cuerpo de la función; el valor escalar es el resultado de una sola instrucción. Para una función escalar de varias instrucciones, el cuerpo de la función, definido en un bloque BEGIN...END, contiene una serie de instrucciones de Transact-SQL que devuelven el único valor. El tipo devuelto puede ser de cualquier tipo de datos excepto text, ntext, image, cursor y timestamp.
En los ejemplos siguientes se crea una función escalar de varias instrucciones. La función toma un valor de entrada, ProductID, y devuelve un valor de devolución único, la cantidad agregada del producto especificado en el inventario.
Ejemplo de las funciones escalerares
USE AdventureWorks2008R2;
GO
GO
CREATE FUNCTION dbo.ufnGetInventoryStock(@ProductID int)
RETURNS int
AS
-- Returns the stock level for the product.
BEGIN
DECLARE ret int;
SELECT ret = SUM(p.Quantity)
FROM Production.ProductInventory p
WHERE p.ProductID = ProductID
AND p.LocationID = '6';
IF (@ret IS NULL)
SET ret = 0;
RETURN ret;
END;
GO
Las funciones con valores de tabla definidas por el usuario devuelven un tipo de datos table. Las funciones con valores de tabla insertados no tienen cuerpo; la tabla es el conjunto de resultados de una sola instrucción SELECT.
click to edit
Este tipo de función es similar a un procedimiento almacenado; la diferencia es que la tabla retornada por la función puede ser referenciada en el "from" de una consulta, pero el resultado de un procedimiento almacenado no.
También es similar a una vista; pero en las vistas solamente podemos emplear "select", mientras que en funciones definidas por el usuario podemos incluir sentencias como "if", llamadas a funciones, procedimientos, etc.
click to edit
create function NOMBREFUNCION
(@PARAMETRO TIPO)
returns NOMBRETABLARETORNO table-- nombre de la tabla
--formato de la tabla
(CAMPO1 TIPO,
CAMPO2 TIPO,
CAMPO3 TIPO
)
as
begin
insert NOMBRETABLARETORNO
select CAMPOS
from TABLA
where campo OPERADOR PARAMETRO
RETURN
end