CHECK CONSTRAINT

20 Ara by NURULLAH ÇAKIR

CHECK CONSTRAINT

Check Constraint bir kolona girilebilecek değerleri limitler. Row bazında çalışır. Null Değerlerin insert edilmesine izin verir. Aşağıdaki scriptte CheckConstraintTablo

isimli bir tablo ve CheckConstraintOrnek isimli bir check constraint oluşturuyoruz. Check Constraint, kolon1 için girilen değerleri 2 den büyük olmaya, kolon2 için girilen değerleride 5 ten küçük olmaya zorluyor.

 

CREATE TABLE CheckConstraintTablo (kolon1 int, kolon2 int);
GO
ALTER TABLE CheckConstraintTablo
ADD CONSTRAINT CheckConstraintOrnek CHECK (kolon1>2 AND kolon2 <5 );

 

Check Constraint’i oluşturduktan sonra bu değeleri sağlayan ve sağlamayan iki insert cümleceği yazalım.

 

USE [Test]
GO
INSERT INTO [dbo].[CheckConstraintTablo]([kolon1],[kolon2])VALUES(3,4)
GO
INSERT INTO [dbo].[CheckConstraintTablo]([kolon1],[kolon2])VALUES(1,4)

 

Yukarıdaki script’teki ilk insert check constraint’teki değerleri kolon1 ve kolon2 için sağlıyor. Bu yüzden insert olacaktır. İkinci insert ise kolon2 için istenilen değeri sağlıyor fakat kolon1 için istenilen değeri sağlamadığı için insert gerçekleşmeyecektir.

 

Sorguyu çalıştırdığımızda aşağıdaki gibi 1 rows affected diyerek ilk kaydı insert etti. Fakat ikinci kaydın insert etmedi ve aşağıdaki hatayı döndü.

 

The INSERT statement conflicted with the CHECK constraint…

 

CHECK Constraint’e başka bir örnek olarak aşağıdaki gibi sadece rakam girmeye zorlayabilirsiniz. Tabloyu oluşturan ilk kişi  bir kolonu int olarak oluşturmamışsa ve bu kolona sadece int değerler girilmesini istiyorsanız işinize yarayabilir.

ALTER TABLE CheckConstraintTablo
ADD CONSTRAINT CheckConstraintOrnek CHECK(kolon1  LIKE '%[0-9]%');

Bu örnekleri çoğaltabilirsiniz. Bu makalede daha fazla detaya girmeyeceğim.

CHECK Constraint’i veritabanı üzerinden aşağıdaki şekilde silebilirsiniz.

Kodla silmek isterseniz de aşağıdaki şekilde silebilirsiniz.

 

ALTER TABLE [dbo].[CheckConstraintTablo] DROP CONSTRAINT [CheckConstraintOrnek]

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir