Het tweede type door de gebruiker gedefinieerde functie, de inline tabel-getaxeerde functie, is vergelijkbaar met een view. Beide zijn verpakt voor een opgeslagen SELECT statement. Een inline door de gebruiker gedefinieerde functie met tabelwaarde behoudt de voordelen van een view, maar voegt parameters toe. Net als bij een view geldt dat als het SELECT statement kan worden bijgewerkt, de functie ook kan worden bijgewerkt.
Een inline tabel-gebaseerde functie maken
De inline tabel-gebaseerde user-defined functie heeft geen BEGIN/END body. In plaats daarvan wordt het SELECT statement geretourneerd als een virtuele tabel:
CREATE FUNCTION FunctionName (InputParameters)RETURNS TableASRETURN (Select Statement);
De volgende inline tabelgewaardeerde functie is vergelijkbaar met ufnGetOrderTotalByProduct, maar in plaats van een enkel ordertotaal voor een opgegeven product te retourneren, retourneert het een set die de productnaam en het ordertotaal voor een opgegeven productcategorie bevat.
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
Oproepen van een inline tabelgewaardeerde functie
Om gegevens op te halen via dbo.ufnGetOrderTotalByProductCategory, roept u de functie …