DENETLEME kısıtlamaları

DENETLEME kısıtlamaları zorlamak etki alanı bütünlük bir sütun tarafından kabul edilen değerler sınırlayarak.Bunlar koyma içinde değerleri kontrol bunlar için yabancı anahtar kısıtlamalarını benzer bir sütun.Fark nasıl bunlar hangi değerler geçerlidir belirlemek de vardır: YABANCI anahtar kısıtlamaları diğerinden geçerli değerler listesini elde tablove kısıtlamalarını tanımla başka bir sütundaki verilere dayalı bir mantık ifadesini geçerli değerleri DENETLEYİN.Örneğin, değer aralık bir maaş sütun sınırlı 100.000 $15.000 TL aralıkları veriler için izin veren bir denetim kısıtlaması oluşturarak.Bu maaşlar dışında düzenli maaş aralık girilen önler.

true veya false döndürür Boole işleçler üzerinde temel Boole (Boole) ifade ile denetim kısıtlamasını oluşturabilirsiniz.Önceki örneğin, mantıksal ifade ise: salary >= 15000 AND salary <= 100000.

Tek bir sütun için birden çok denetim kısıtlamaları uygulayabilirsiniz.Şimdi oluşturarak birden çok sütun için tek bir denetim kısıtlaması uygulayabilirsiniz tablo düzeyi.Örneğin, birden çok sütun denetim kısıtlamasını herhangi ile satır doğrulamak için kullanılan bir Ülke /bölge sütun değeri usa de iki karakter değeri vardır durumu sütun.Bu, tek bir yerde denetlenmek üzere birden fazla koşulu sağlar.

Dikkat notuDikkat

Açık veya kapalı veri türü dönüştürme dahil kısıtlamalar belirli işlemleri başarısız olmasına neden olabilir.Örneğin, bir alter table gibi sınırlamalar, kaynakları bölümü değiştirme tablo üzerinde tanımlı neden olabilir...GEÇİŞ işlemi başarısız.Veri türü dönüştürme kısıtlaması tanımlarındaki kaçının.

Kontrol kısıtlamaları sınırlamaları

Kontrol kısıtlamaları, yanlış değerlendirmek değerleri reddedebilir.Null değerler bilinmeyen olarak değerlendirmek için kendi varlığını ifadelerde bir kısıtlama kılabilir.For example, suppose you place a constraint on an int column MyColumn specifying that MyColumn can contain only the value 10 (MyColumn=10).Bu değeri eklerseniz, içine null Sütunum, Veritabanı Altyapısı null ekler ve dönmez bir hata.

DENETİM kısıtlamasını denetleme koşulu herhangi bir satır için false olduğunda, doğru sonucunu verir tablo.Tüm satırları yeni oluşturduğunuz tablo yoksa, bu tablo üzerinde herhangi bir denetim kısıtlaması geçerli kabul edilir.Bu durum beklenmedik üretebilir sonuçlar, aşağıdaki örnekteki gibi.

CREATE TABLE CheckTbl (col1 int, col2 int);
GO
CREATE FUNCTION CheckFnctn()
RETURNS int
AS 
BEGIN
   DECLARE @retval int
   SELECT @retval = COUNT(*) FROM CheckTbl
   RETURN @retval
END;
GO
ALTER TABLE CheckTbl
ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn() >= 1 );
GO

The CHECK constraint being added specifies that there must be at least one row in table CheckTbl.Ancak, alter tablo deyim olduğundan hiçbir satır tablosundaki karşı bu kısıtlamanın koşulu denetlemek, başarılı olur.

Kontrol kısıtlamaları delete deyimleri sırasında doğrulanır.Bu nedenle, belirli türde bir denetim kısıtlamaları olan tablolara delete deyimleri yürütme beklenmeyen üretebilir sonuçlar.Örneğin, tablo üzerinde yürütülen aşağıdaki ifadeleri dikkate CheckTbl.

INSERT INTO CheckTbl VALUES (10, 10)
GO
DELETE CheckTbl WHERE col1 = 10;

The DELETE statement succeeds, even though the CHECK constraint specifies that table CheckTbl must have at least 1 row.