Funciones con valor de tabla en SQL Server
Las funciones con valor de tabla en SQL server se utilizan para obtener resultados como una tabla de datos por otras consultas.
En SQL Server se manejan dos tipos de funciones para el usuario.
- Funciones escalares (UDF).
- Funciones con valor de tabla (TVF).
Las funciones con valor de tabla reciben los valores del usuario para realizar las operaciones y devolver un resultado en forma de tabla (colunas y filas).
Ubicación de funciones con valor de tabla
Dentro de una base de datos tenemos las diferentes carpetas de administración, entre ellas tenemos la de programación.
Dentro de esta carpeta tenemos una subcarpeta de nombre Funciones de valor tabla.
Crear la función de tabla en SQL
Creamos un archivo para función tabla dando clic derecho sobre la carpeta, seleccionamos Nueva función en línea tabla valor.
Al seleccionar la opción se crea un archivo de consulta con la estructura de la función.
Los puntos marcados en rojo que debemos tomar en cuenta para personalizar la función.
- Agregar el nombre de la función.
- Declarar los parámetros que el usuario debe enviar a la función.
- Operaciones que devuelvan un resultado.
Siguiendo la estructura podemos crear una función que nos genere un resultado de las consultas desde un procedimiento almacenado.
Podría interesarte Cursores en SQL Server
Ejemplo
Ya que conocemos la estructura de este tipo de funciones, vamos a crear una función que nos resuelva el siguiente problema.
Obtener todos los productos a partir de la clave de una categoría.
Analizando el problema, necesitamos realizar una consulta a la tabla de productos y filtrar por la clave de la categoría.
Por lo tanto, la función podría quedar de la siguiente manera.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Gerardo Alvarez
-- Create date: 01-07-2019
-- Description: Obtener los productos de una categoria
-- =============================================
CREATE FUNCTION PRODUCTOS_POR_CATEGORIA
(
@Valor int
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM Products WHERE CategoryID = @Valor
)
GO
Para guardar la función en la base de datos debemos de ejecutar la consulta.
Para confirmar que se ha guardado vamos a la ubicación de este tipo de funciones.
Utilizar función
Ya que tengo creada la función ahora veamos como utilizarlo desde otra consulta select, para obtener la tabla de datos.
Abrimos una nueva consulta de la misma base de datos y coloquemos una consulta select tradicional.
SELECT * FROM Tabla;
Para utilizar la función debemos de cambiar “Tabla” por el nombre de la función y enviarle un valor entera que representa la categoría.
SELECT * FROM dbo.PRODUCTOS_POR_CATEGORIA(1);
Ejecuta la consulta, podrás obtener el resultado siguiente.
Podría interesarte Variable de tipo tabla en SQL Server
La manera de hacer uso de este tipo de función es diferente a las funciones escalares, sin embargo, son llamados de la misma forma.
Se puede crear una variable dentro de una funcion tipo tabla como para controlar los resultados de una consulta