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.
.

 

Bir cevap yazın

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