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

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.

temporary table in sql server

.

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

.

2 Responses

  1. s.a bende sizin yaptiginiz gibi bir temp tablo yapmaya çalisiyorum ama yapamamadim yardimci olurmusunuz

  2. Hocam ellerinize saglik çok güzel anlatmissiniz. Bana sql’i sevdirdiniz. Iyi ki varsiniz hocam. 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.