Сегодня мы собираемся узнать о выражении Common table, которое является новой функцией, которая была введена в SQL Server 2005 и доступна в более поздних версиях.
Общее табличное выражение: - Общее табличное выражение может быть определено как временный набор результатов или, другими словами, является заменой представлений в 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»
Затем мы пишем «как» и заключаем наш код в две скобки (---), мы можем объединить несколько таблиц в заключенных в скобки.
В последней строке я использовал «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.