O segundo tipo de função definida pelo utilizador, a função valorizada em linha de tabela, é semelhante a uma vista. Ambas são embrulhadas para uma declaração SELECT armazenada. Uma função inline table-valued user-dealued retém os benefícios de uma vista, e adiciona parâmetros. Tal como numa visualização, se a instrução SELECT for actualizável, então a função é também actualizável.
Criar uma função Inline Table-Valued Function
A função inline table-valued user-dealued não tem corpo BEGIN/END. Em vez disso, a declaração SELECT é devolvida como uma tabela virtual:
CREATE FUNCTION FunctionName (InputParameters)RETURNS TableASRETURN (Select Statement);
A seguinte função em linha tabela-valorizada é semelhante a ufnGetOrderTotalByProduct, mas em vez de devolver um total de encomenda único para um produto fornecido, devolve um conjunto que inclui o nome do produto e o total da encomenda para uma categoria de produto fornecida.
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
Chamando uma função Inline Table-Valued Function
Para recuperar dados através da dbo.ufnGetOrderTotalByProductCategory, chame a função …