SQL Server Check Constraint Kullanımı
<h3><strong>SQL Server Check Constraint </strong>Bir kolona eklediğimiz verilerin belirlediğimiz koşullara karşı kontrol etmemiz için kullanılır. <br /> Bir kolon için birden fazla Check Constraint tanımlanabilir. </h3> <p>Örneğin; Kullanıcılar tablomuz var, veri girişi yaparken şifre kolonumuza en az 5 en fazla 15 karakterli bir değer girsin .</p> <p>Örneğin; Kullanıcılar tablomuz var, veri girişi yaparken Telefon kolonumuza en az 11 ve 0XXXXXXXXXX şablonu ile kayıt girebilrsin gibi...</p> <blockquote> <p>--Örnek tablo oluşturuyoruz<br /> CREATE TABLE TestKullanicilar <br /> ( KullaniciID INT PRIMARY KEY NOT NULL, <br /> KullaniciAd VARCHAR(20) NOT NULL, <br /> Sifre VARCHAR(15) NOT NULL, <br /> Email VARCHAR(40) NOT NULL, <br /> Telefon VARCHAR(11) NOT NULL <br /> ); </p> <p><br /> --Girilen Sifre değeri 5 5 karakterden uzun 15 karakterden kısa olmalıdır<br /> ALTER TABLE TestKullanicilar ADD CONSTRAINT CHK_SifreUzunluk CHECK(LEN(Sifre) >= 5 AND LEN(Sifre) <= 15)</p> <p>--Girilen mail değerinde '.com' ya da '.net' alan adı aranacak eğer yoksa ya da email değeri boşsa hata verecektir.<br /> ALTER TABLE TestKullanicilar ADD CONSTRAINT CHK_Email CHECK(CHARINDEX('.com', Email)>0 OR CHARINDEX('.net', Email) > 0 OR Email IS NULL)</p> <p>--Kayıdı kabul etti çünkü şifre değerimiz 5 karakterli ve mail kolonumuzda .com alan adı var<br /> INSERT INTO TestKullanicilar VALUES(1,'DGN','Sifre','[email protected]','5397983654');</p> <p>--Kayıdı kabul etmedi, mail kolonumuzda alan adı var ancak şifre değerimiz 3 karakterli<br /> INSERT INTO TestKullanicilar VALUES(2,'DGN','sif’','[email protected]','5397983654');</p> <p>--Kayıdı kabul etmedi, şifre değerimiz 5karakterli ancak mail kolonumuzda .com ya da .net alan adı yok<br /> INSERT INTO TestKullanicilar VALUES(2,'DGN','sifre5’','[email protected]','5397983654');</p> <p>--Kontrolü yapılan kolon Telefon, İstenilen format : 01234567899<br /> ALTER TABLE TestKullanicilar ADD CONSTRAINT<br /> CHK_Telefon CHECK( Telefon IS NULL OR( Telefon LIKE '[0][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') AND LEN(Telefon) = 11)</p> <p> --Kayıt tüm kolonlarda istenilen formatta olduğundan kabul etti<br /> INSERT INTO TestKullanicilar VALUES(3,'DGN','sifre55’','[email protected]','5397983654');</p> </blockquote> <h3>Peki varolan bir tabloda ki kolona sonradan müdahale etmek istersek ne yapmamız gerekecek ? <br /> Yani mail adresi örneğinden gidersek geçmişte 'asda@asda' olarak mail kayıtları yapılmış biz kontrolü yeni yapmak istiyoruz<br /> ve geçmişte ki bu kayıtların kontrol edilmesini istemiyoruz. Bunun için With No Check komutunu kullanıyoruz.</h3> <blockquote> <p><br /> ALTER TABLE TestKullanicilar<br /> WITH NOCHECK ADD CONSTRAINT CHK_Email_Kontrol_yeni CHECK( Email IS NULL OR( CHARINDEX('.com', Email)>0 OR CHARINDEX('.net', Email) > 0 OR Email IS NULL))</p> </blockquote>