Oggi impareremo l'espressione di tabella comune che è una nuova funzionalità che è stata introdotta in SQL Server 2005 e disponibile anche nelle versioni successive.
Espressione di tabella comune: - L'espressione di tabella comune può essere definita come un set di risultati temporaneo o in altre parole è un sostituto delle visualizzazioni in SQL Server. L'espressione di tabella comune è valida solo nel batch di istruzioni in cui è stata definita e non può essere utilizzata in altre sessioni.
Sintassi di dichiarazione CTE (espressione di tabella comune): -
with [Name of CTE]
as
(
Body of common table expression
)
Facciamo un esempio: -
CREATE TABLE Employee([EID] [int] IDENTITY(10,5) NOT NULL,[Name] [varchar](50) NULL)
insert into Employee(Name) values('Neeraj')
insert into Employee(Name) values('dheeraj')
insert into Employee(Name) values('shayam')
insert into Employee(Name) values('vikas')
insert into Employee(Name) values('raj')
CREATE TABLE DEPT(EID INT,DEPTNAME VARCHAR(100))
insert into dept values(10,'IT')
insert into dept values(15,'Finance')
insert into dept values(20,'Admin')
insert into dept values(25,'HR')
insert into dept values(10,'Payroll')
Ho creato due tabelle impiegate e Dept e ho inserito 5 righe in ogni tabella. Ora vorrei unirmi a queste tabelle e creare un set di risultati temporaneo per utilizzarlo ulteriormente.
With CTE_Example(EID,Name,DeptName)
as
(
select Employee.EID,Name,DeptName from Employee
inner join DEPT on Employee.EID =DEPT.EID
)
select * from CTE_Example
Consente di prendere ciascuna riga dell'istruzione una per una e capire.
Per definire CTE scriviamo la clausola "with", quindi diamo un nome all'espressione della tabella, qui ho dato il nome come "CTE_Example"
Quindi scriviamo "As" e racchiudiamo il nostro codice tra due parentesi (---), possiamo unire più tabelle tra parentesi quadre.
Nell'ultima riga, ho usato "Seleziona * da CTE_Example", ci riferiamo all'espressione di tabella comune nell'ultima riga di codice, quindi possiamo dire che è come una vista, in cui stiamo definendo e usando la vista in un singolo batch e CTE non sono archiviati nel database come oggetto permanente. Ma si comporta come una vista. possiamo eseguire istruzioni di eliminazione e aggiornamento su CTE e ciò avrà un impatto diretto sulla tabella di riferimento che vengono utilizzate in CTE. Facciamo un esempio per capire questo fatto.
With CTE_Example(EID,DeptName)
as
(
select EID,DeptName from DEPT
)
delete from CTE_Example where EID=10 and DeptName ='Payroll'
Nell'istruzione precedente stiamo eliminando una riga da CTE_Example e eliminerà i dati dalla tabella di riferimento "DEPT" che viene utilizzata nel CTE.