Comment : Utiliser les fonctions définies par l’utilisateur et évaluées par tableDefined Functions

  • 30/03/2017
  • 2 minutes de lecture
    • s
    • n
    • . T
    • v
    • n
    • +6

Une fonction à valeur de tableauvalued function renvoie un seul rowset (contrairement aux procédures stockées, qui peuvent renvoyer plusieurs formes de résultats). Comme le type de retour d’une fonction à valeur de table est Table, vous pouvez utiliser une fonction à valeur de table partout dans SQL où vous pouvez utiliser une table. Vous pouvez également traiter la fonction à valeur de table comme vous le feriez pour une table.

Exemple

La fonction SQL suivante indique explicitement qu’elle renvoie un TABLE. Par conséquent, la structure du rowset retourné est implicitement définie.

CREATE FUNCTION ProductsCostingMoreThan(@cost money) RETURNS TABLE AS RETURN SELECT ProductID, UnitPrice FROM Products WHERE UnitPrice > @cost 

LINQ to SQL mappe la fonction comme suit :

public IQueryable<ProductsCostingMoreThanResult> ProductsCostingMoreThan( System.Nullable<decimal> cost){ return this.CreateMethodCallQuery<ProductsCostingMoreThanResult>(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), cost);}
 <FunctionAttribute(Name:="dbo.ProductsCostingMoreThan", IsComposable:=True)> _Public Function ProductsCostingMoreThan(<Parameter(DbType:="Money")> ByVal cost As System.Nullable(Of Decimal)) As IQueryable(Of ProductsCostingMoreThanResult) Return Me.CreateMethodCallQuery(Of ProductsCostingMoreThanResult)(Me, CType(MethodInfo.GetCurrentMethod, MethodInfo), cost) End Function

Exemple

Le code SQL suivant montre que vous pouvez effectuer une jointure à la table que la fonction renvoie et, par ailleurs, la traiter comme toute autre table :

SELECT p2.ProductName, p1.UnitPrice FROM dbo.ProductsCostingMoreThan(80.50) AS p1 INNER JOIN Products AS p2 ON p1.ProductID = p2.ProductID 

En LINQ to SQL, la requête serait rendue comme suit :

 var q =from p in db.ProductsCostingMoreThan(80.50m)join s in db.Products on p.ProductID equals s.ProductIDselect new { p.ProductID, s.UnitPrice };
 Dim q = _From p In db.ProductsCostingMoreThan(80.5), p1 In db.Products _Where p.ProductID = p1.ProductID _Select p.ProductID, p1.UnitPrice

See also

  • Fonctions définies par l’utilisateur

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *