SQL Server’ da Tablo Değişkeni
Bu makalede Microsoft SQL Server da bulunan tablo değişkeninin kullanımına dair içeriğe yer verilmiştir.
Tablo değişkeni, SQL Server’ daki geçici tabloya benzer şekilde verileri geçici olarak depolamaya yardımcı olan bir değişken türüdür. Aslında, tablo değişkeni bir değişkenin tüm özelliklerini sağlar, ancak değişkenlerin geçici veya normal tablolardan farklı olarak bazı sınırlamaları vardır.
Tablo değişkeninin söz dizimi aşağıdaki gibidir:
DECLARE @DegiskenAdi TABLE
(
kolon_1 VERITIPI,
kolon_2 VERITIPI,
colon_N VERITIPI
)
Bir tablo değişkeni oluşturmak istiyorsak, yerel değişkenlerde yaptığımız gibi DECLARE deyimini başlatmalıyız. Değişkenin adı (@) işaretiyle başlamalıdır. TABLE anahtar sözcüğü, bu değişkenin bir tablo değişkeni olduğunu belirtir. TABLE anahtar sözcüğünden sonra, SQL Server’ da ki tablo değişkeninin sütun adlarını ve veri türlerini tanımlamamız gerekir. Oluşturduğumuz tablo değişkenleri üzerinde veri ekleme, silme ve güncelleme işlemlerini gerçekleştirebiliriz.
Örnek 1: Bu örnekte bir tablo değişkeni tanımlayacağız ve yılın aylarını bu tablo değişkenine ekleyeceğiz. Tablo değişkeni üzerinde gerçekleştireceğimiz veri operasyonlarını insert, update ve delete; veri listeleme operasyonumuzu ise select sorguları ile gerçekleştireceğiz.
SQL Server Management Studio üzerinde yeni bir sorgu penceresi açıp, aşağıdaki görselde ki gibi yeni bir tablo değişkeni oluşturup veri ekleme işlemini yapabiliriz. Ardından tablo değişkenimize eklediğimiz verileri listeye biliriz.
Oluşturduğumuz tablo değişkenimizdeki verilerden herhangi birini güncellemek için update, silmek için delete sorgularını kullanabiliriz. Örneğin tablomuzda yer alan Aralık verisini ARALIK verisi ile değiştirmek istediğimiz de update sorgusu ile ilgili işlemi yapabiliriz. Tablo değişkenimizdeki Ekim verisini silmek istediğimizde delete sorgusu ile ilgili işlemi yapabiliriz. Tablo değişkenimizde gerçekleştireceğimiz veri güncelleme ve veri silme işlemlerinin sorgularına ve çalışma zamanı çıktısı aşağıdaki görseldeki gibidir.
Tablo Değişkenlerinin Veri Saklama Yeri Neresidir?
Bu sorunun cevabı şudur: tablo değişkenleri tempdb veri tabanında saklanır. Bunun altını çizmemizin nedeni bazen bu sorunun cevabının tablo değişkeninin bellekte saklanmasıdır, ancak bu tamamen yanlıştır. Bu sorunun cevabını ispatlamadan önce, tablo değişkenleriyle ilgili bir sorunu netleştirmeliyiz. Tablo değişkenlerinin yaşam döngüsü bildirim noktasında başlar ve ilgili sorgunun sonunda biter. Sonuç olarak, SQL Server’ da ki tablo değişkeni, ilgili sorgunun sonunda silinir.
Gördüğünüz gibi, üstte yer alan sorgu iki sonuç kümesi döndürüyor. SONUÇ KÜMESİ 1, bildirilen tablo değişkeninin sütun adlarını ve veri türlerini içerir ve SONUÇ KÜMESİ 2 herhangi bir veri içermez. Bu durumun nedeni, ilk INFORMATION_SCHEMA.COLUMNS görünümü ve tempdb veri tabanından @DeneyTablosu isimli tablo değişkeninin bilgisini alabilmemiz için aynı toplu iş içinde yürütülen tablo değişkenidir. İkinci sorgu @DeneyTablosu hakkında herhangi bir veri listelemedi çünkü GO ifadesi toplu işi bitirdi, böylece @DeneyTablosu isimli tablo değişkeninin yaşam döngüsü sona erdi. Bu örnek ile SQL Server’ da tablo değişkeninin saklama konumunu kanıtladık.
Tablo Değişkenine Nasıl Kısıtlama Ekleriz?
Kısıtlamalar, veri bütünlüğünü sağlayan veritabanı nesneleridir. Tablo değişkenleri, aşağıdaki kısıtlamaları oluşturmamıza izin verir:
- Primary Key (Birincil Anahtar)
- Unique (Benzersiz)
- Null (Boş)
- Check (Kontrol)
Aşağıdaki örnekte, tablo değişkenindeki her tür kısıtlamayı sorunsuz bir şekilde kullanacağız:
Yukarıdaki örnekte görüleceği üzere oluşturduğumuz tablo değişkeninin sütunlarına Primary Key, Unique, Null ve Check kısıtlamarını tanımlayabiliriz.
Öte yandan, Yabancı Anahtar kısıtlamaları tablo değişkenleri için kullanılamaz. Dikkat edilmesi geren önemli bir unsur ise tablo değişkenini bildirirken kısıtlamaları tanımlamamız gerekir, aksi takdirde bir hata ile karşılaşırız. Örneğin, aşağıdaki sorgu bu unsur nedeniyle bir hata döndürecektir. Tablo değişkeninin bildiriminden sonra tablo yapısını değiştiremeyiz.
Yukarıdaki örnekte görüldüğü üzere @TestTablosu isimli tablo değişkenimize tablo bildiriminden sonra herhangi bir kısıtlama ekleyemedik. Yazmış olduğumuz sorguyu çalıştırdığımız zaman sonuç görselinde görüldüğü üzere söz dizimi hatası ile karşılaştık.