El segundo tipo de función definida por el usuario, la función con valores de tabla en línea, es similar a una vista. Ambas se envuelven para una sentencia SELECT almacenada. Una función definida por el usuario con valores de tabla en línea conserva las ventajas de una vista y añade parámetros. Al igual que con una vista, si la sentencia SELECT es actualizable, entonces la función también es actualizable.
Creación de una función con valores de tabla en línea
La función definida por el usuario con valores de tabla en línea no tiene cuerpo BEGIN/END. En su lugar, la sentencia SELECT se devuelve como una tabla virtual:
CREATE FUNCTION FunctionName (InputParameters)RETURNS TableASRETURN (Select Statement);
La siguiente función inline table-valued es similar a ufnGetOrderTotalByProduct, pero en lugar de devolver un único total de pedido para un producto suministrado, devuelve un conjunto que incluye el nombre del producto y el total del pedido para una categoría de producto proporcionada.
CREATE FUNCTION dbo.ufnGetOrderTotalByProductCategory(@ProductCategoryID int)RETURNS TABLEAS RETURN ( SELECT p.ProductID, p.Name, sum(sod.OrderQty) as TotalOrders FROM Production.Product p JOIN Sales.SalesOrderDetail sod ON p.ProductID = sod.ProductID JOIN Production.ProductSubcategory s ON p.ProductSubcategoryID = s.ProductSubcategoryID JOIN Production.ProductCategory c ON s.ProductCategoryID = c.ProductCategoryID WHERE c.ProductCategoryID = @ProductCategoryID GROUP BY p.ProductID, p.Name ); GO
Llamada a una función inline con valor de tabla
Para recuperar datos a través de dbo.ufnGetOrderTotalByProductCategory, llame a la función …