Сегодня мы узнаем о выражении Common table, которое является новой функцией, которая была введена в SQL Server 2005 и доступна и в более поздних версиях.
Выражение Common Table: - Можно определить выражение Common Tableкак временный набор результатов или, другими словами, его замена представлений в SQL Server.Общее табличное выражение допустимо только в пакете оператора, где оно было определено, и не может использоваться в других сеансах.
Синтаксис объявления CTE (общего табличного выражения): -
with [Name of CTE]
as
(
Body of common table expression
)
ПозволяетВозьмем пример: -
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')
Я создал две таблицы сотрудников и отдел и вставил 5 строк в каждую таблицу.Теперь я хотел бы присоединиться к этим таблицам и создать временный набор результатов для дальнейшего его использования.
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
Давайте возьмем каждую строку утверждения одну за другой и поймем.
Чтобы определить CTE, мы пишем предложение «with», затем мы даем имя табличному выражению, здесь я дал имя как «CTE_Example»
Затем мы пишем «As» и заключаем нашекод в двух скобках (---), мы можем объединить несколько таблиц во вложенных скобках.
В последней строке я использовал «Select * from CTE_Example», мы ссылаемся на выражение общей таблицы впоследняя строка кода, поэтому мы можем сказать, что это похоже на представление, где мы определяем и используем представление в одном пакете, а CTE не сохраняется в базе данных как постоянный объект.Но это ведет себя как представление.мы можем выполнить оператор удаления и обновления для CTE, и это будет иметь прямое влияние на таблицу, на которую ссылаются, которая используется в CTE.Давайте рассмотрим пример, чтобы понять этот факт.
With CTE_Example(EID,DeptName)
as
(
select EID,DeptName from DEPT
)
delete from CTE_Example where EID=10 and DeptName ='Payroll'
В приведенном выше заявлении мы удаляем строку из CTE_Example, и она удаляет данные из ссылочной таблицы "DEPT", которая используется в CTE.