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

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

returns NOMBRETABLARETORNO table-- nombre de la tabla

--formato de la tabla

(CAMPO1 TIPO,

CAMPO2 TIPO,

CAMPO3 TIPO

)

as

begin

select CAMPOS

from TABLA

where campo OPERADOR PARAMETRO

RETURN

end