Le deuxième type de fonction définie par l’utilisateur, la fonction en ligne à valeur de table, est similaire à une vue. Toutes deux sont enveloppées pour une instruction SELECT stockée. Une fonction définie par l’utilisateur inline à valeur de table conserve les avantages d’une vue, et ajoute des paramètres. Comme pour une vue, si l’instruction SELECT est actualisable, la fonction l’est également.
Création d’une fonction inline à valeur de tableau
La fonction inline à valeur de tableau définie par l’utilisateur n’a pas de corps BEGIN/END. Au lieu de cela, l’instruction SELECT est renvoyée sous la forme d’une table virtuelle :
CREATE FUNCTION FunctionName (InputParameters)RETURNS TableASRETURN (Select Statement);
La fonction en ligne à valeur de table suivante est similaire à ufnGetOrderTotalByProduct, mais au lieu de renvoyer un seul total de commande pour un produit fourni, elle renvoie un ensemble comprenant le nom du produit et le total de commande pour une catégorie de produits fournie.
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
Appeler une fonction en ligne à valeur de tableau
Pour récupérer des données par le biais de dbo.ufnGetOrderTotalByProductCategory, appelez la fonction …