Il secondo tipo di funzione definita dall’utente, la funzione inline table-valued, è simile a una vista. Entrambi sono avvolti da un’istruzione SELECT memorizzata. Una funzione definita dall’utente con valore di tabella in linea mantiene i vantaggi di una vista e aggiunge dei parametri. Come con una vista, se l’istruzione SELECT è aggiornabile, allora anche la funzione è aggiornabile.
Creazione di una funzione inline table-valued
La funzione inline table-valued user-defined non ha un corpo BEGIN/END. Invece, l’istruzione SELECT viene restituita come una tabella virtuale:
CREATE FUNCTION FunctionName (InputParameters)RETURNS TableASRETURN (Select Statement);
La seguente funzione inline table-valued è simile a ufnGetOrderTotalByProduct, ma invece di restituire un singolo totale dell’ordine per un prodotto fornito, restituisce un insieme che include il nome del prodotto e il totale dell’ordine per una categoria di prodotto fornita.
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
Chiamare una funzione inline table-valued
Per recuperare i dati attraverso dbo.ufnGetOrderTotalByProductCategory, chiamare la funzione …