#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
- Real Code Launch 2008: grazie!
- SQL Server 2008 disponibile in RTM
- SQL Server 2008 rimandato al terzo trimestre
- Uno sguardo a LINQ to SQL
- Velocity: ADO.NET Distributed Cache
- Microsoft Security Bulletin di settembre 2008
- Speciale per il lancio di Visual Studio 2008, SQL Server 2008 e Windows Server 2008 dal 25/02 al 07/03
- Membership API per SQL Server anche senza dbo
- Cosa c'è in ASP.NET 3.5 Service Pack1
- Sql Server 2008 e Visual Studio 2008 SP1
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.






Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!