Pazar , 21 Ocak 2018

Trigger’larımızda COLUMNS_UPDATED() Fonksiyonun Kullanımı

Update işlemleri için bir trigger yazdığımızda UPDATE() fonksiyonunu kullanarak bir kolonun değerinin değişip değişmediğini yani ilgili kolonun update olup olmadığını anlayabiliyorduk. Çünkü Update() fonksiyonu parametre olarak bir kolon adı alıyor ve triggerımızı tetikleyen işlemde o kolonun değerinin değişip değişmediğini kontrol ederek eğer değer değişmişse True değişmemişse False değerini döndürüyordu. Fakat bazı durumlarda sadece bir kolonun değerini değil aynı andan birden fazla kolonun değerinin değişmediğini kontrol etmek isteyebiliriz. İşte böyle durumlarda yani birden fazla kolonun update edilip edilmediğini anlamak için COLUMNS_UPDATED() fonksiyonunu kullanabiliriz.

 COLUMNS_UPDATED() fonksiyonunu hangi kolonların değerlerinin değiştiğini anlamak için bit mask denilen bit maskeleme işlemini kullanmaktadır. Yani tablomuzun her kolonu için sırasıyla bir bit değeri tutulmakta ve bu değer eğer kolon update olmuşsa 1, update olmamışsa 0 olarak tutulmaktadır. Konunun daha iyi anlaşılması için 8 kolonulu bir tabloda fonksiyonumuzun nasıl davrandığını şematize edelim.

Yukarıdaki resmin üst tarafında gördüğümüz gibi her kolon için kaçıncı kolon olduğuna bağlı olarak 2’nin o üssünden bir eksik olan değer verilmektedir. Örneğin birinci kolon için 2 üzerin 0 verilirken, 5. Kolon için 2 üzeri dört değeri tutulmaktadır. Ayrıca Resmin alt tarafında gördüğümüz 1 ve 0 değerleri ise ilgili kolonun update edilip edilmediği değerini tutulmaktadır. Bizim örneğimize göre ikinci,üçüncü ve altıncı kolondaki değerler update edilmiştir.

COLUMNS_UPDATED() fonksiyonunu kullanılırken herhangibir parametre almaz bunun yerine değişen değerin toplamını döndürür ve biz bu toplamdaki değeri bit işlemleri vasıtasıyla kullanabiliriz. Örneğin bizim örneğimizde ikinci,üçüncü ve altıncı kolonlar update edilmişti. Bu yüzden COLUMNS_UPDATED() fonksiyonunu bize 2, 4 ve 32 değerlerinin toplamı olan 38 değerini dmdürecek olup biz bu değeri OR,AND veya XOR gibi bir bit işlemcisi kullanarak kontrol edebiliriz. Örneğin yukarıdaki 38 değerini ele alıp bu değeri nasıl kullanacağımıza bakalım.

IFADE

ACIKLAMASI

IF(COLUMNS_UPDATED() >0)

 

Herhangi bir değerin update olup olmadığı bilgisini verecektir.
IF(COLUMNS_UPDATED() ^38=0) Sadece yukarıda belirtiğimiz ve toplam değeri 38 yapan ikinci,üçüncü ve altıncı kolonlardaki değer değişip değişmediğinin kontrolü yapılır.
IF(COLUMNS_UPDATED() &38=0) Diğer kolonların değişip değişmediğne bakmadan sadece ikinci,üçüncü ve altıncı kolonlardaki değer kontrol edilip bunların değişip değişmediğ kontrol edilir.
IF(COLUMNS_UPDATED() |38 !=0) İkinci,üçüncü ve altıncı kolonlar dışında başka bir kolonun değerinin değişip değişmediğ kontrol edilir.

Hakkında ismailadar

Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*


*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>