SQL SERVERDA RULE (KURAL) KAVRAMI ve SQL SERVERDA RULE OLUŞTURMAK

Merhaba arkadaslar bu makalemizde SQL Serverda kullanilan Rule yapisina deginecegim. Adindan da anlasilacagi gibi Rule, SQL Serverda kural olusturmak demektir.

Peki neden kural olusturma gereksinimi duyariz? SQL Server da Rule nedir?

SQL Serverda bir sütun içine girilen degerleri kontrol etmek istiyorsak o sütun için Rule yazmamiz gerekir. Örnegin bir tablonuzda TC Kimlik Numarasini da tuttugunuz bir sütun var ve bu sütun içerisine rakam disinda bir deger girilmesini istemiyorsunuz. Iste bu gibi durumlarda Rule olusturabilirsiniz. Ya da bir seyler sattiginizi düsünelim ve sattiginiz ürünlerin fiyatlari 1-100 lira arasinda degisiyor. Sizde yanlis veri girilmesine karsin hatayi en aza indirmek için, tablonuzun satisfiyati sütununuzun sadece 1-100 arasinda degerler almasini istiyorsunuz. Bu gibi durumlarda da Rule yazabilirsiniz.

Rule dedigimiz gibi tablo sütunlari için kullanilmasinin yani sira kullanici tanimli degiskenlere de uygulanabilir.

NOT: Bir sütun için yalnizca bir tane Rule olusturabiliriniz.

Birkaç örnekle konuyu pekistirelim.

Ilk örnegimiz sadece sayi girilmesini istedigimiz bir rule yazalim.

create rule SadeceSayi –1
as
@rakam like ‘_ _-%[0-9]’ –2

Gördügünüz gibi kullanimi oldukça basit.

–1 Create rule deyip ardindan kural adini yaziyoruz.

–2 Daha sonra istedigimiz kurali yazip bunu bir degere aktariyoruz. Ben @rakam adli degerime aktardim. Sadece 0-9 arasi sayilarin girisini istedim. Bunun disinda _(alt çizgi), -(tire) ve bosluk gibi karakterleri de kontrol ettim.

Simdi gelelim yazdigimiz kurali binding yapmaya. Yani yazdigimiz kurali istedigimiz tablodaki istedigimiz sütun ile iliskilendirmeye.

Bunun için yapimiz asagidaki sekilde olacaktir;

Exec sp_bindrule kural_adi,’tabloadi.sütunadi’

exec sp_bindrule SadeceSayi,’makbuzlar.tckimlikno’ –1
Islemleri basari ile yaptigimiz takdirde “Rule bound to table column.” Adli mesaji almis olacagiz

–1 SadeceSayi adli kuralimizi makbuzlar tablosundaki tckimlikno adli sütun ile iliskilendirdik.

Burada bulunan sp_bindrule olusturdugumuz kurali binding yapmak için kullandigimiz bir sistem prosedürüdür.

Simdi Kontrol Edelim…

sql-serverda-rule-kural-kavrami-1

sql-serverda-rule-kural-kavrami-1

Tckimlikno adli sütuna sayi disinda baska karakterlerde girdigimizde karsimiza bir uyari mesaji çikiyor. Uyari mesajina bakarsak hatanin bizim olusturdugumuz kural ile ilgili oldugunu görüyoruz

Olusturdugumuz Kurali Iptal Etmek…

sql-serverda-rule-kural-kavrami-2

sql-serverda-rule-kural-kavrami-2

Ilk akla gelen, resimdeki gibi Kurallarin tutuldugu alanda istedigimiz kurali silmek olacaktir. Bu yanlis degildir fakat eksiktir diyebiliriz. Çünkü yukaridaki silme islemini direk yapmak istedigimizde bize bu kuralin bir sütunla iliskili oldugunu söyleyecek ve kurali silmeyecektir. Bunun için sp_unbindrule sistem prosedürünu kullanarak kural ile sütun arasindaki iliskiyi kesmis olacagiz. Bu prosedürü örnegimiz için asagidaki gibi kullanmamiz gerekiyor.

exec sp_unbindrule ‘makbuzlar.tckimlikno’ –-‘tabloadi.sutunadi’

Artik yukarida bulunan resimdeki gibi silme islemi yapabiliriz.

Diger Örnek Rule Islemleri

1- Bir sütunda sadece iki sayi arasindaki degerlere izin vermek.

CREATE RULE kural_adi
AS
@deger >= 1 and @deger < 1000 Bu örnekte bind islemi yapacagimiz sütuna yalnizca 1 ila 1000 arasindaki degerleri girebiliriz. 2- Bir sütunda sadece istenilen ifadelere yer vermek CREATE RULE kural_adi AS @list IN (‘Salih’, ‘Engin’) Bu örnekte bind islemi yapacagimiz sütuna yalnizca Salih ve Engin ifadelerini girebiliriz. Iyi Çalismalar….