Ein paar Beispiele zu zeigen, nur für den Fall:
Inline-Tabelle bewertet
CREATE FUNCTION MyNS.GetUnshippedOrders()
RETURNS TABLE
AS
RETURN SELECT a.SaleId, a.CustomerID, b.Qty
FROM Sales.Sales a INNER JOIN Sales.SaleDetail b
ON a.SaleId = b.SaleId
INNER JOIN Production.Product c ON b.ProductID = c.ProductID
WHERE a.ShipDate IS NULL
GO
Multi Statement Table bewertet
CREATE FUNCTION MyNS.GetLastShipped(@CustomerID INT)
RETURNS @CustomerOrder TABLE
(SaleOrderID INT NOT NULL,
CustomerID INT NOT NULL,
OrderDate DATETIME NOT NULL,
OrderQty INT NOT NULL)
AS
BEGIN
DECLARE @MaxDate DATETIME
SELECT @MaxDate = MAX(OrderDate)
FROM Sales.SalesOrderHeader
WHERE CustomerID = @CustomerID
INSERT @CustomerOrder
SELECT a.SalesOrderID, a.CustomerID, a.OrderDate, b.OrderQty
FROM Sales.SalesOrderHeader a INNER JOIN Sales.SalesOrderHeader b
ON a.SalesOrderID = b.SalesOrderID
INNER JOIN Production.Product c ON b.ProductID = c.ProductID
WHERE a.OrderDate = @MaxDate
AND a.CustomerID = @CustomerID
RETURN
END
GO
Gibt es einen Vorteil bei der Verwendung eines Typs (Inline- oder Multi-Anweisung) gegenüber dem anderen? Gibt es bestimmte Szenarien, in denen eines besser ist als das andere, oder sind die Unterschiede rein syntaktisch? Mir ist klar, dass die beiden Beispielabfragen unterschiedliche Aufgaben haben, aber gibt es einen Grund, warum ich sie so schreiben würde?
Das Lesen über sie und die Vorteile / Unterschiede wurde nicht wirklich erklärt.