Ç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;
- Her ikisi de TEMPDB içerisinde oluşturulur.
- 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.
- Her ikisi üzerinde cluster index oluşturulabilir.
- Table variable üzerinde non-cluster index oluşturulamaz.
- Table variable için statistic bilgiler oluşturulmaz.
- Ve en önemli fark temporary table, transaction yönetimini desteklerken table variable desteklemez.