Bu makalemizde Sql Server da kullanilan hesaplanmis kolonlari (computed column) anlatacagiz. Eger degeri ayni tablodaki diger kolonlardan bir veya birkaçina bagli olarak degisen bir kolona ihtiyaciniz varsa bu durumda Hesaplanmis Kolonlari kullanabilirsiniz.
Örnegin Satis tablosunda birim fiyat ve adet kolonlarinin çarpimi ile tutar kolonu olusturmak istiyorsaniz, Tutar kolonunu hesaplanmis kolon olarak olusturmaniz isinize yarayacaktir.
.
Hesaplanmis kolonlar kullanarak sql sorgularini yazarken zamandan ve kod uzunlugundan kurtulmus olursunuz. Bu sayede her seferinde hesaplama yapmak için kod yazmak zorunda kalmazsiniz.
Asagidaki scripte baktiginiz zaman daha iyi anlayacaksinizdir.
create table Satis ( UrunAdi varchar(20), BirimFiyati decimal(6,2), Adet int, Tutar as (BirimFiyati * Adet) ) |
Hesaplanmis kolonlari olusturuken sunlara dikkat etmelisiniz:
.
· Hesaplanmis bir kolonu olusturan kolonlar ayni tablo içinde olmalidir, baska bir tablodaki kolonu kullanmak isterseniz bu kolona ancak bir user-defined functions üzerinden ulasarak kullanabilirsiniz.
· Hesaplanmis bir kolon bir sql sorgusu içeremez, yani select yazarak deger alamazsiniz.
· Hesaplanmis kolonlar diger kolonlarin degerleri üzerinden olusturuldugu için default anahtar kelimesini alamazlar, yani bir varsayilan deger atanamazlar.
· Hesaplanmis kolonu olusturan kolonlardan herhangi biri baska bir hesaplanmis kolon olamaz.
· Hesaplanmis kolona insert veya update ile bir deger atamasi yapamazsiniz.
Hesaplanmis kolonlar fiziksek olarak yer kaplamazlar, sorgunun çalismasi aninda otpmatik olarak hesaplanirlar. Yani hesaplanmis kolonlari sanal kolonlar olarak düsünebilirsiniz. Eger hesaplanmis kolonlarinda hesaplanarak fiziksel yer tutmasini istiyorsaniz tabloyu olustururken PERSISTED anahtar kelimesini kullanmaniz gerekir. Bu sayede sanal bir kolon degil gerçek bir kolon gibi davranir. PERSISTED anahtar kelimesini kullandigini zaman hesaplanmis kolon üzerinde bir index tanimlamasida yapabilirsiniz.
Simdi bir kaç örnek vererek konuyu tamamlayalim.
create table Satis ( UrunAdi varchar(20), BirimFiyati decimal(6,2), Adet int, Tutar as (BirimFiyati * Adet) ) insert into Satis values(‘Urun1’,10.2,23) insert into Satis values(‘Urun1’,1,10) select * from Satis |
Yukaridaki sorgunu sonucu asagidaki gibi döner.
UrunAdi |
BirimFiyati |
Adet |
Tutar |
Urun1 |
10.20 |
23.00 |
234.60 |
Urun1 |
1.00 |
10.00 |
10.00 |
Gördügünüz gibi Tutar kolonu otomatik olarak hesaplanarak olusturuldu.
Hesaplanmis kolonlari where cümlecigi içinde de kullanabilliriz.
select * from Satis where Tutar > 100 |
Varchar kolonlarida hesaplanmis kolonlarda kullanabiliriz. Örnegin Ad ve soyad kolonlarini birlestirerek Kisiye ait AdSoyad alanini asagidaki gibi olusturabiliriz.
create table Kisi ( KisiId int, Ad varchar(50), Soyad varchar(50), AdSoyad as Ad+Space(1)+Soyad ) insert into Kisi values(1,‘Sabri’,‘Kunt’) insert into Kisi values(1,‘Ali’,‘Demir’) insert into Kisi values(1,‘Ahmet’,‘Tanrýverdi’) insert into Kisi values(1,‘Seher’,‘Kunt’) select * from Kisi |
Sorgu sonucu :
KisiId |
Ad |
Soyad |
AdSoyad |
1 |
Sabri |
Kunt |
Sabri Kunt |
1 |
Ali |
Demir |
Ali Demir |
1 |
Ahmet |
Tanriverdi |
Ahmet Tanriverdi |
1 |
Seher |
Kunt |
Seher Kunt |
Hesaplanmis kolonlar hakkinda yeterince bilgi verdigimizi düsünüyorum, Kendinizde örnekler yaparak konuyu pekistirmenizi tavsiye ederim.
.