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?