Operatorul APPLY
Operatorul APPLY (similar unui CROSS JOIN) permite pentru fiecare rand al unui tabel invocarea unei table expression (expresie tabelara) gen tabel, view, tabel derivat sau functii tip table-valued (functia returneaza un tabel).
Exista doua forme:
§ CROSS APPLY – un rand din tabelul caruia i se aplica operatorul este inclus in rezultat doar daca expresia tabelara returneaza rezultate pentru acel rand
§ OUTER APPLY – toate randurile din tabelul caruia i se aplica operatorul
Sintaxa:
FROM left_table_source
{OUTER | CROSS} APPLY right_table_source
Exemplu:
USE AdventureWorks;
GO
-- functia OrdineRecente returneaza ultimele
-- doua ordine pentru un client
CREATE FUNCTION Sales.OrdineRecente(@CustomerID int)
RETURNS TABLE AS
RETURN
SELECT TOP (2) SalesOrderID, OrderDate
FROM Sales.SalesOrderHeader
WHERE CustomerID = @CustomerID
ORDER BY OrderDate DESC
GO
-- exemplu CROSS APPLY
SELECT S.[Name] as Customer,
O.SalesOrderID, O.OrderDate
FROM Sales.Store S
CROSS APPLY
Sales.OrdineRecente(CustomerID) AS O
-- exemplu OUTER APPLY
SELECT S.[Name] as Customer,
O.SalesOrderID, O.OrderDate
FROM Sales.Store S
OUTER APPLY
Sales.OrdineRecente(CustomerID) AS O
Cristian Andrei Lefter, SQL Server MVP
MCT, MCSA, MCDBA, MCAD, MCSD .NET,
MCTS, MCITP - Database Administrator SQL Server 2005
http://sqlserver.ro