Alper ÇELİK

Bilgisayar Mühendisi

Table Variable

Table variables konusu SQL 2000 ile birlikte temp tablolara alternatif olarak geliştirilmişlerdir. Oluşturulduktan sonra depolandıkları yer temp tablolar gibi TempDB database'dir. Çoğu durumda table variable kullanmak temp tablo kullanmaktan daha performanslı sonuçlar elde edilmesini sağlayacaktır. Oluşturulduktan sonra parametre de geçilebilir. Bir table variable oluşturmak istiyor iseniz DECLARE sözcüğü ile dışarda tablonun yapısını tanımlıyor(kolon isimleri ve data tiplerini) olmanız gerekir sonrasında bu tabloyu işleme sokabilirsiniz. Şayet join işlemlerine sokacaksanız takma ad(alias) vermenizde bir zorunluluktur. Örnek üzerinden ilerleyelim.  
 
Resim-1'de de görüldüğü gibi tblDepartment ve tblEmployees isimli 2 tablom var. Şimdi bu tabloları departman adı üzerinden gruplayıp yeni oluşturacağım @tblEmpCount tablosuna atacağım.
 
DECLARE @tblEmpCount table (DeptName nvarchar(20),  TotalEmp int)  
 
INSERT @tblEmpCount
SELECT td.DeptName, COUNT(*) AS TotalEmp
FROM tblEmployees te INNER JOIN tblDepartment td ON td.DeptID=te.DepartmentID
GROUP BY td.DeptName
 
SELECT * FROM @tblEmpCount WHERE TotalEmp>=2
 
 
Gördüğünüz gibi önce DECLARE sözcüğü ile tablonun ana gövdesini oluşturduk sonra INSERT sözcüğü ile birleşimini yaptığımız 2 adet tablonun sütun bilgilerini aktardık. Yalnız burda dikkatinizi çekmek istediğim husus, DECLARE sözcüğündeki kolon sırası ile SELECT elementindeki kolon sırasının aynı oluşu. Index mantığı ile çalıştığı için sıralamanın aynı olması gerekir.  
 
--------------------------------------------------------------  
 
Table variable'lar temp tablolara göre bir miktar daha performanslı sonuçlar üretebilirler zira daha az kilitlenme ve loglamaya(transaction yoktur) maruz kalırlar. Örneğin;
 
DECLARE @tvar TABLE(col1 int, col2 int)  
BEGIN TRAN  
INSERT INTO @tvar VALUES(4,4)  
ROLLBACK  
SELECT * FROM @tvar     
 
Sorgusu transaction'a takılmadan sonuç ekranında kayıt bilgilerini getirir.  
 
Şayet oluşturduğumuz tablo değişkenini tempDB'de görüntülemek istersek aşağıdaki sorguyu bir bütün şekilde(araya batch koymadan) çalıştırıyor olmamız gerekir.  
DECLARE @tvar TABLE(col1 int, col2 int)    
SELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES    
 
Bu sorgu sonucu, tablo adı kısmında farklı bir isimlendirme görüyor oluruz. Bunun sebebi SQL Server Database Engine'ın bu tabloya kendince dinamik bir isim atamasından ötürüdür.
 
Önemli Not: Tablo değişkenler truncate edilemezler ve DECLARE edildikten sonra tablo adında veya sütun adında değişikliğe uğrayamazlar.   
 
Takip eden makalelerimde görüşmek üzere.  
 
 
 

Trigger Serisinin İlk Bölümüne Buradan Ulaşabilirsin

Trigger'lar özelleşmiş bir tür stored prosedürlerdir(SP).