#751 - Utilizzare le CTE di SQL Server 2005 per generare query ricorsive

Con la nuova versione di SQL Server sono state introdotte le Common Table Expressions (CTE). Tramite questa feature si possono creare dinamicamente in memoria delle "view" su cui si possono poi effettuare delle query.

Ecco un esempio:

WITH cte(managerid, employeeid) AS 
(
SELECT managerid, employeeid
FROM humanresources.employee
)
SELECT * FROM cte


Benché inutile, l'esempio da l'idea di come si possa sfruttare questo meccanismo per risolvere situazioni complesse. Si crea una View temporanea chiamata "cte" che contiene i risultati della query inclusa tra parentesi e poi la si interroga con lo statement successivo al blocco "WITH".

Una delle caratteristiche più utili delle CTE è quella di poterle utilizzare per creare delle query ricorsive, come in questo esempio:

WITH cte(managerid, employeeid) AS 
(
SELECT managerid, employeeid
FROM humanresources.employee
WHERE managerid IS NULL

UNION ALL

SELECT e.managerid, e.employeeid
FROM humanresources.employee e
JOIN cte d ON e.managerid = d.employeeid
)
SELECT * FROM cte


Nella prima query della CTE si esegue una select. Il risultato di questa viene utilizzato come View in join nella seconda select generando così la ricorsione.

Queste query sono basate sul database AdventureWorks.


Approfondimenti
Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.