Bugün, SQL Server 2005'te tanıtılan ve sonraki sürümlerde de kullanılabilen yeni bir özellik olan Ortak tablo ifadesi hakkında bilgi edineceğiz.
Ortak tablo İfadesi: - Ortak tablo ifadesi geçici bir sonuç kümesi olarak tanımlanabilir veya başka bir deyişle, SQL Server'daki görünümlerin yerine kullanılabilir. Ortak tablo ifadesi, yalnızca tanımlandığı ifade kümesinde geçerlidir ve diğer oturumlarda kullanılamaz.
CTE bildirme sözdizimi (Ortak tablo ifadesi): -
with [Name of CTE]
as
(
Body of common table expression
)
Bir örnek verelim: -
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')
Ben iki tablo çalışan ve Borç yarattık ve her tabloya 5 satır ekledi. Şimdi bu tablolara katılmak ve daha fazla kullanmak için geçici bir sonuç kümesi oluşturmak istiyorum.
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
İfadenin her satırını tek tek ele alıp anlayalım.
CTE'yi tanımlamak için "with" deyimini yazıyoruz, sonra tablo ifadesine bir isim veriyoruz, burada "CTE_Example" olarak isim verdim
Sonra "As" yazıp kodumuzu iki parantez (---) içine alıyoruz, ekteki parantez içinde birden çok tabloyu birleştirebiliriz.
Son satırda, "CTE_Example'den * Seç *" i kullandım, kodun son satırında Ortak tablo ifadesine atıfta bulunuyoruz, bu yüzden şunu söyleyebiliriz: toplu iş ve CTE veritabanında kalıcı bir nesne olarak depolanmaz. Ama bir manzara gibi davranıyor. CTE'de sil ve güncelle ifadesi yapabiliriz ve bu CTE'de kullanılan referans alınan tablo üzerinde doğrudan etkisi olacaktır. Bu gerçeği anlamak için bir örnek alalım.
With CTE_Example(EID,DeptName)
as
(
select EID,DeptName from DEPT
)
delete from CTE_Example where EID=10 and DeptName ='Payroll'
Yukarıdaki ifadede CTE_Example öğesinden bir satır siliyoruz ve CTE'de kullanılan "DEPT" referans tablosundan veri silinecek.