Wer immer schon mal wissen wollte, wie APPLY eigentlich funktioniert, der findet bei
simple-talk.com dazu einen interessanten Artikel: "SQL Server APPLY Basics".

Leider geht er nicht besonders tief und vermittelt den Eindruck als würde APPLY nur mit einer Funktion gehen. tatsächlich geht es auch mit einer derived table. Hier zwei Beispiele aus der Adventureworks auf SQL Server 2005.

APPLY mit Function:

SELECT
sp.FirstName + ' ' + sp.LastName AS FullName,
fn.SalesAmount
FROM
Sales.vSalesPerson AS sp
CROSS APPLY
fn_sales(sp.SalesPersonID) AS fn

APPLY mit derived table:

SELECT
sp.FirstName + ' ' + sp.LastName AS FullName,
fn.SalesAmount
FROM
Sales.vSalesPerson AS sp
CROSS APPLY
( SELECT TOP 3
SalesPersonID,
ROUND(TotalDue, 2) AS SalesAmount
FROM
Sales.SalesOrderHeader
WHERE
SalesPersonID = sp.SalesPersonID
) AS fn

Spannend ist sich den Zugriffsplan anzusehen… Ganz schöner Unterschied zwischen beiden Arten, gelle?