SQL Server da Temporary (Geçici) Tablo Kullanmak
SQL Server developerlarin isini çok kolaylastiran ve kullanimi kolay temporary(geçici) tablo yapisini destekler. Geçici tablolar çalisma aninda olusturulur ayrica normal bir tabloda yapabilecegimiz tüm islemleri temp tablolarda da yapabiliriz. Temp Tablolar tempdb veritabaninda saklanirlar.
Bu makalemiz de temp tablolarin kullanimi ile ilgili giris seviyesinde hizli bir balis atacagiz.
Temp Tablo Tipleri
SQL Server iki farkli temp tablo tipi saglar.
- Local Temp Tablo
- Global Temp Tablo
Local Temp Tablo
Local Temp tablolar sadece tabloyu olusturan kullanicinin, olusturmak için kullandigi connection üzerin de geçerlidir. Kullanici baglantiyi kapattigi anda otomatik olarak silinir. Local Temp tablo tanimlamak için tablo isminin önüne # isareti koymamiz yeterlidir.
.Global Temp Table
Global olarak temp tablo tanimlamak için ## karakterlerini tablo isminden önce eklememiz yeterlidir. Global temp tablolar bir connection içinde tanimlandigi anda, normal tablolar gibi tüm kullanicilar ve connectionlar içinde kullanilabilir hale gelirler. Global tabloyu olusturdugunuz connection kapatilana kadar bu tablo var olmaya devam eder.
SQL Serverda Temp Tablo Olusturmak
Yukarida anlattigimiz iki farkli tipteki temp tablolarin nasil olusturulup kullanilacagini asagidaki örneklere bakarak anlamaya çalisalim
Local Temp Tablo
CREATE TABLE #LocalTempTablo ( ID int, Ad varchar(20), Soyad varchar(20) )
Yukaridaki sorgu ile tempdb içinde bir geçici(temp) tablo olusturmus olduk, normal bir tabloya insert/select yapiyormus gibi temp tabloya da asagidaki gibi insert/select yapabiliriz.
INSERT
insert into #LocalTempTablo values ( 1, 'Sabri','KUNT');
SELECT
select * from #LocalTempTablo
Select Sonucu
ID Ad Soyad ----------- -------------------- -------------------- 1 Sabri KUNT (1 row(s) affected)
Yukariki scriptleri çalistirdiktan baska bir sorgu penceresinde select veya insert sorgusu çalistirirsaniz asagidaki hatayi alirsiniz.
Msg 208, Level 16, State 0, Line 1 Invalid object name '#LocalTempTablo'
Yukaridaki hatanin sebebi, olusturdugumuz temp tablonun sadece olusturuldugu connection içinde geçerli olmasidir.
Global Temp Tablo
Global bir temp tablo olusturmak için iki adet # karakteri kullaniyoruz (##). Global temp tablolar olusturuldugu connection aktif oldugu sürece tüm kullanicilar ve connectionlarda kullanilabilir demistir. Bir örnekle daha iyi anlayalim.
CREATE TABLE ##GlobalTempTablo ( ID int, Ad varchar(20), Soyad varchar(20) )
INSERT ve SELECT Sorgusu
insert into ##GlobalTempTablo values ( 1, 'Sabri','KUNT'); select * from ##GlobalTempTablo
Yukaridaki select ve insert sorgusunu istediginiz herhangi bir sorgu ekraninda çalistirabilirsiniz. Ilk olusturdugunuz connection açik oldugu sürece heryerden bu tablolara erisim yapilabilir. Bunu kendinizde deneyerek görebilirsiniz.
SQL Server Temp tablolari asagida da görüldügü gibi tempdb veritabanin da tutar.
.Temp Tablolar Nerede ve Ne Amaçla Kullanilir
Büyük veriler ile çalisirken bazen bir sorgu sonucunda dönen kayitlari baska bir sorguda join islemine tabi tutariz. Temp tablo kullanmak yerine iç içe select yazabiliriz fakat bu büyük kayitlarda bazen performans sikintisi ve komplex sqllere sebeb olur. Bu yüzden belirli bir sorgu sonucunu temp bir tabloya atar ve bu tabloyuda baska bir sorguda kullanabiliriz. Bununla ilgili olarak asagidaki örnegi inceleyebilirsiniz.
select top 100 CustomerKey,FirstName,LastName into #temp from dbo.DimCustomer select ProductKey,OrderDateKey ,s.CustomerKey,SalesOrderNumber ,UnitPrice from FactInternetSales s inner join #temp t on s.CustomerKey = t.CustomerKey
Alternatif Yöntem : Tablo Degiskeni
Temp tablo olusturmak için alternatif diger yöntem tablo degiskeni tanimlamaktir. Nasil tanimlandigi ve kullanildigini asagida görebilirsiniz.
Declare @TempTableVariable TABLE( ID int, Ad varchar(20), Soyad varchar(20) ) insert into @TempTableVariable values ( 1, 'Sabri','KUNT'); insert into @TempTableVariable values ( 1, 'Ali','RÜZGAR'); select * from @TempTableVariable
Ne zaman Temp Tablo Ne zaman Tablo Degiskeni Kullanmaliyiz
- Eger 100 kayitdan daha az kayit ile çalisacaksaniz tablo degiskeni kullanin, diger türlü temp tablo kullanmalisiniz. Bunun sebebi SQL server tablo degiskeni için istatistik olusturmaz.
- Eger index olusturmaniz gerekiyor ise temp tablo kullanin.
s.a bende sizin yaptiginiz gibi bir temp tablo yapmaya çalisiyorum ama yapamamadim yardimci olurmusunuz
Hocam ellerinize saglik çok güzel anlatmissiniz. Bana sql’i sevdirdiniz. Iyi ki varsiniz hocam.