Hoy vamos a aprender sobre la expresión de tabla común que es una nueva característica que se introdujo en SQL Server 2005 y también está disponible en versiones posteriores.
Expresión de tabla común: la expresión de tabla común se puede definir como un conjunto de resultados temporal o, en otras palabras, es un sustituto de las vistas en SQL Server. La expresión de tabla común solo es válida en el lote de instrucciones donde se definió y no se puede usar en otras sesiones.
Sintaxis de declarar CTE (expresión de tabla común): -
with [Name of CTE]
as
(
Body of common table expression
)
Tomemos un ejemplo: -
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')
He creado dos tablas de empleado y Departamento e inserté 5 filas en cada tabla. Ahora me gustaría unirme a estas tablas y crear un conjunto de resultados temporal para usarlo más.
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
Tomemos cada línea de la declaración una por una y comprendamos.
Para definir CTE escribimos la cláusula "con", luego le damos un nombre a la expresión de la tabla, aquí he dado el nombre como "CTE_Example"
Luego escribimos "As" y encerramos nuestro código entre dos corchetes (---), podemos unir varias tablas en los corchetes adjuntos.
En la última línea, he usado "Seleccionar * de CTE_Example", estamos refiriendo la expresión de tabla común en la última línea de código, por lo que podemos decir que es como una vista, donde estamos definiendo y usando la vista en una sola batch y CTE no se almacenan en la base de datos como un objeto permanente. Pero se comporta como una vista. podemos realizar una declaración de eliminación y actualización en CTE y eso tendrá un impacto directo en la tabla referenciada que se está utilizando en CTE. Tomemos un ejemplo para entender este hecho.
With CTE_Example(EID,DeptName)
as
(
select EID,DeptName from DEPT
)
delete from CTE_Example where EID=10 and DeptName ='Payroll'
En la declaración anterior, estamos eliminando una fila de CTE_Example y eliminará los datos de la tabla de referencia "DEPT" que se está utilizando en el CTE.