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 Table
kan 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