Utilizzare le CTE di SQL Server 2005 per generare query ricorsive

di Stefano Mostarda, in UserScript, SQL Server,

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.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi