Buenas noches amigos ... 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 temporales 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 instrucción 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
)
Le permite tomar 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 empleados y Dept y se inserta 5 filas en cada tabla . Ahora me gustaría unirme a estas tablas y crear un conjunto de resultados temporales 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
Vamos a tomar cada línea de la declaración una por una y entender.
Para definir CTE escribimos "con" cláusula, a continuación, damos un nombre a la expresión de tabla, nombre aquí me he dado como "CTE_Example"
Entonces escribimos "como" y encierran nuestro código en dos soportes (---), 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, así que podemos decir que es como una vista, donde estamos definiendo y usando el ver en un solo lote y CTE no se almacena 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 a la que se hace referencia que se están 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 que están suprimir una fila de CTE_Example y se eliminarán los datos de la tabla de referencia "DEPARTAMENTO" que se utiliza en el CTE.
Espero que este artículo sea útil para usted y podrá utilizar CTE siempre que lo considere adecuado.
u dijo CTE es ideal para selecciona recursivas. lo que quieres decir recursivo seleccionar. por favor hazme entender solo por sql que es recursivo seleccionado por CTE. – Thomas
Nuevamente, MSDN acude al rescate con un artículo detallado sobre Consultas recursivas usando CTE: http://msdn.microsoft.com/en-us/library/ms186243.aspx. También consulte la respuesta de Marc con una explicación muy breve (pero fácilmente comprensible) de lo que es una consulta recursiva. – FarligOpptreden