Una TVF (Table Value Functions, Función con Valores de Tabla), son funciones definidas por el usuario muy parecidas a las vistas, pero con la particularidad que pueden recibir parámetros, así que podríamos decir que son como vistas, pero que reciben parámetros.
En algunos casos, las TVF podrían reemplazar los procedimientos almacenados (SP, Store Procedure), o bien poder ser utilizados dentro de los mismos.
Son muy útiles, ya que disminuye el tamaño de una consulta, que puede llegar a ser más compleja, permitiendo mejor legibilidad de la misma.
Sintaxis
Características:
- TVF's retornan una tabla virtual, llamada consulta (query)
- SQL Server provee dos tipos de TVF
- Inline: basada de una única expresión SELECT
- Multi-Statement: Crea y carga varias tablas
- Soportan parámetros de entrada (no así las vistas).
- Una TVF Inline, puede ser pensada como una vista parametrizada.
Ejemplo de TVF's
Veremos la utilización dentro de una consulta de la TVF llamada CxC.AntSald_Det, la cual recibe como parámetro el Id de empresa y filtra la información únicamente para esa condición.
Select a.cCodProc,b.cDescript, Sum(a.Saldo) as Saldo from CxC.AntSald_Det(@cEmpresa) a inner join CxCProc b on (a.cCodProc=b.cCodProc) group by a.cCodProc,b.cDescrip order by a.cCodProc
Conclusión
La utilización de TVF ayudará mucho, tanto a tener un código más legible, como a realizar consultas complejas. Por lo que recomiendo su uso. En otro artículo veremos la utilización de los CTE (Common Table Expressions).Gracias por leer y espero que te sea de utilidad este pequeño artículo.
Grande te agradezco por cada nueva cosa que publicas y te digo lo que me enseñastes sobre CTE lo he aplicado en una aplicacion que estoy haciendo esta aplicacio consta de facturacion y la factura la hago usando una CTE
ResponderBorrarInteresante tu post. Tambien cabe mencionar que si se abusa de las funciones en consultas de miles de registros baja el desempeño de la consulta. Pero bueno todo depende de donde se use y como. Gracias por tu post.
ResponderBorrarGracias por tu comentario Sergio.
ResponderBorrarWilliam, muy buena observación, a como dicen, "Todo en Exceso es malo", la herramienta ahí está, sólo que debe utilizarse con moderación.