Dela via


Anvisningar: Använda tabellvärdesbaserade användardefinierade funktioner

En tabellvärdesfunktion returnerar en enskild raduppsättning (till skillnad från lagrade procedurer, som kan returnera flera resultatformer). Eftersom returtypen för en tabellvärdesfunktion är Tablekan du använda en tabellvärdesfunktion var som helst i SQL som du kan använda en tabell. Du kan också behandla funktionen tabellvärde precis som en tabell.

Exempel 1

Följande SQL-funktion anger uttryckligen att den returnerar en TABLE. Därför definieras den returnerade raduppsättningsstrukturen implicit.

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

LINQ till SQL mappar funktionen enligt följande:

[Function(Name="dbo.ProductsCostingMoreThan", IsComposable=true)]
public IQueryable<ProductsCostingMoreThanResult> ProductsCostingMoreThan([Parameter(DbType="Money")] 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

Exempel 2

Följande SQL-kod visar att du kan ansluta till tabellen som funktionen returnerar och på annat sätt behandla den som du skulle göra med andra tabeller:

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

I LINQ till SQL återges frågan på följande sätt:

        var q =
from p in db.ProductsCostingMoreThan(80.50m)
join s in db.Products on p.ProductID equals s.ProductID
select 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

Se även