Der zweite Typ von benutzerdefinierten Funktionen, die Inline-tabellenwertige Funktion, ähnelt einem View. Beide sind für eine gespeicherte SELECT-Anweisung umhüllt. Eine benutzerdefinierte Funktion mit Inline-Tabellenwert behält die Vorteile eines Views bei und fügt Parameter hinzu. Wie bei einem View ist auch die Funktion aktualisierbar, wenn die SELECT-Anweisung aktualisierbar ist.
Erstellen einer tabellenwertigen Inline-Funktion
Die benutzerdefinierte Inline-Funktion mit Tabellenwert hat keinen BEGIN/END-Körper. Stattdessen wird die SELECT-Anweisung als virtuelle Tabelle zurückgegeben:
CREATE FUNCTION FunctionName (InputParameters)RETURNS TableASRETURN (Select Statement);
Die folgende Inline-Tabellenwertfunktion ähnelt ufnGetOrderTotalByProduct, aber anstatt eine einzelne Bestellsumme für ein bereitgestelltes Produkt zurückzugeben, gibt sie einen Satz zurück, der Produktname und Bestellsumme für eine bereitgestellte Produktkategorie enthält.
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
Aufrufen einer tabellenwertigen Inline-Funktion
Um Daten über dbo.ufnGetOrderTotalByProductCategory abzurufen, rufen Sie die Funktion …