Come fare: Usare funzioni definite dall’utenteDefined Functions

  • 03/30/2017
  • 2 minuti per leggere
    • s
    • n
    • T
    • v
    • n
    • +6

Una funzione valutata come tabellarestituisce un singolo rowset (a differenza delle stored procedure, che possono restituire più forme di risultato). Poiché il tipo di ritorno di una funzione con valore di tabella è Table, si può usare una funzione con valore di tabella ovunque in SQL si possa usare una tabella. Potete anche trattare la funzione table-valued proprio come fareste con una tabella.

Esempio

La seguente funzione SQL dichiara esplicitamente che restituisce un TABLE. Pertanto, la struttura del rowset restituito è implicitamente definita.

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

LINQ to SQL mappa la funzione come segue:

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

Esempio

Il seguente codice SQL mostra che è possibile unirsi alla tabella restituita dalla funzione e trattarla come qualsiasi altra tabella:

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

In LINQ to SQL, la query sarebbe resa come segue:

 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

Vedi anche

  • Funzioni definite dall’utente

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *