Geçici Tablo ve Tablo Türü Değişken Arasındaki Fark

Çalışma esnasında bir kayıt listesinin sonucunu geçici saklamak için geçici tablo (temporary table) veya tablo türü değişken (table variable) kullanırız. Peki bunların arasındaki fark nedir ?
SQL Server’de yerel (local) ve genel (global) olmak üzere 2 tür geçici tablo kullanırız. Yerel tabloları başında “#” olacak şekilde isimlendiririz. Genel tabloları başında “##” olacak şekilde isimlendiririz.

--Yerel geçici tablo
SELECT * INTO #t1 FROM Alisveris

--Genel geçici tablo
SELECT * INTO ##t1 FROM Alisveris

Yerel geçici tablo ile genel geçici tablo arasındaki tek fark, yerel tabloya sadece oluşturulduğu oturumdan erişilebilir. Genel tabloya ise diğer oturumlardan da erişilebilir. Geçici tabloların yaşam süresi oturumlarıyla sınırlıdır. Yani oluşturuldukları oturumda DROP edildikleri zaman veya oturum kapatıldığı zaman tablolar silinmiş olur.
Geçici tablolar üzerinde normal tablolarda yaptığımız her türlü (clustered / non-clustered index oluşturma, identity kolon kullanmaz, transaction yönetimi .) DDL ve DML işlemi yapılabilir. Sadece Foreign Key constraint oluşturulamaz. Geçici tablolar normal tablolar gibi diskte (tempdb) tutulur ve transaction log tarafında loglanır.
Tablo türü değişkenler de geçici tablolar gibi aynı amaç için kullanılır. SQL Server’de değişken tanımlanır gibi tanımlanır. Bu tablolar üzerinde sadece cluster index oluşturulabilir.

--Tablo oluştur
DECLARE @Alisveris TABLE (SatirId INT identity(1,1) primary key,
	UrunAdi VARCHAR(50) )

--Kayıt girelim
INSERT @Alisveris VALUES('Urun1')
INSERT @Alisveris VALUES('Urun2')

--Tabloyu okuyalım
SELECT * FROM @Alisveris

Temporary tables ve table variable arasındaki benzer ve farklılıklar şunlardır;

  1. Her ikisi de TEMPDB içerisinde oluşturulur.
  2. Table variable constraint tarafında daha kısıtlı yeteneğe sahip. Primary Key oluşturulabilse de default ve check constraint konusunda başarılı sayılmaz.
  3. Her ikisi üzerinde cluster index oluşturulabilir.
  4. Table variable üzerinde non-cluster index oluşturulamaz.
  5. Table variable için statistic bilgiler oluşturulmaz.
  6. Ve en önemli fark temporary table, transaction yönetimini desteklerken table variable desteklemez.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir