Funciones de tabla en SQL

Las funciones de tabla devuelven un conjunto de resultados en forma de tabla. A continuación, vamos a ver con ejemplos las sentencias, para crear, ejecutar, invocar, modificar y eliminar funciones de tabla.

CREATE FUNCTION

La sentencia CREATE FUNCTION permite crear nuevas funciones en base de datos. En el siguiente ejemplo vamos a crear una nueva función tabla llamada: devolverCliente la cual devuelva un resultado en forma de tabla con información de la tabla: Clientes.

CREATE FUNCTION dbo.devolverCliente (@id INT)
RETURNS TABLE
    AS
    RETURN (
        SELECT nombre, 
               apellidos, 
               direccion, 
               cuenta
        FROM Clientes
        WHERE idClientes = @id);

GO

Esta función recibe como parámetro de entrada un id, filtrando en la tabla Clientes para devolver un registro con los campos especificados en la SELECT interna.

También es posible declarar internamente una estructura TABLE con sus columnas, que podremos rellenar con los datos de una SELECT interna a través de un INSERT:

CREATE FUNCTION dbo.devolverClienteAlternativo (@id INT)
RETURNS @resultadoCliente TABLE
(
	nombre VARCHAR(50),
	apellidos VARCHAR (255),
	direccion VARCHAR (255),
	cuenta INT
)
    AS
	BEGIN
		INSERT @resultadoCliente
		SELECT nombre, 
               apellidos, 
               direccion, 
               cuenta
		FROM Clientes
		WHERE idClientes=@id
		RETURN
	END

GO

Ejecución e invocación

Podemos ejecutar funciones directamente desde la sentencia SELECT. Para ello, basta con que escribamos el nombre de la función después de la cláusula SELECT *. Si nuestra función recibe parámetros de entrada, debemos introducir el valor respectivo dentro de los paréntesis de la función, respetando el orden en el que se declararon y el tipo de datos que pueden soportar.

SELECT * 
FROM devolverCliente(2);

El resultado de la ejecución en forma de tabla sería:

nombre apellidos direccion cuenta
María López Ruiz C/ de Alcalá 138 123456789

ALTER FUNCTION

ALTER FUNCTION define la sentencia para modificar funciones de usuario ya declaradas. Las modificaciones podrán afectar a los argumentos o parámetros de entrada, la lógica interna…

Procedemos a modificar la función devolverCliente para que reciba en lugar de un id, el nombre y apellidos como parámetros de entrada:

ALTER FUNCTION dbo.devolverCliente (@nombre VARCHAR (50), @apellidos VARCHAR (50))
RETURNS TABLE
    AS
    RETURN (
        SELECT nombre, 
               apellidos, 
               direccion, 
               cuenta
        FROM Clientes
        WHERE nombre = @nombre
        AND apellidos = @apellidos);

GO
SELECT * 
FROM devolverCliente('Fernando', 'García Rodríguez');
nombre apellidos direccion cuenta
Fernando García Rodríguez C/ Virgen del rosal 28 111222333

DROP FUNCTION

La sentencia DROP FUNCTION elimina del sistema la función específica.

La siguiente ejecución elimina de nuestra base de datos la función devolverCliente():

DROP FUNCTION IF EXISTS dbo.devolverCliente;

Como en otros tipos de DROP, es recomendable utilizar siempre la cláusula IF EXISTS