Udostępnij za pośrednictwem


CHECK Constraints

Ograniczenia CHECK wymuszanie integralność domena, ograniczając wartości, które są akceptowane przez kolumna.Są one podobne do ograniczenia klucz obcy, w tym kontrolują one wartości, które są wprowadzane kolumna.Różnica jest w sposób, w jaki te określają wartości, które są prawidłowe: Ograniczenia klucz obcy uzyskać listę prawidłowych wartości z innej tabela i ograniczeń typu CHECK określa prawidłowe wartości z wyrażenie logicznego, który nie jest oparty na danych w innej kolumnie. Na przykład zakres wartości dla wynagrodzenia kolumna może być ograniczone poprzez utworzenie ograniczenia CHECK, który umożliwia jedynie dane dla zakresu od 15 000 zł przez 100 000 USD.Zapobiega to wprowadzanego poza zakres regularnych wynagrodzenia wynagrodzenia.

Ograniczenie typu CHECK można utworzyć z logiczną wyrażenie (logiczny), zwraca wartość PRAWDA lub FAŁSZ w oparciu o operatory logiczne.Poprzedni przykład wyrażenie logiczne jest: salary >= 15000 AND salary <= 100000.

Wiele ograniczeń typu CHECK można stosować do jednej kolumna.Można użyć pojedynczej ograniczenie typu CHECK do wielu kolumn, tworząc go poziom tabela.Na przykład ograniczenie typu CHECK wielokolumnowego może służyć do potwierdzenia jeden wiersz z kraj/region wartości kolumna USA ma także wartość dwóch znaków w Stan kolumna.Pozwala to na wiele warunków, które mają być sprawdzane w jednym miejscu.

Ostrzeżenie

Ograniczenia, które zawierają konwersja typu danych bezpośrednia lub pośrednia może spowodować, że pewne operacje kończy się niepowodzeniem.Na przykład takich ograniczeń zdefiniowanych tabel, będących źródeł partycji przełączanie może powodować niepowodzenie operacji instrukcji ALTER tabela... przełącznik.Należy unikać konwersja typu danych w definicjach ograniczenie.

Ograniczenia dotyczące ograniczeń typu CHECK

Ograniczenia CHECK odrzucić wartości, które mają wartość FAŁSZ.Ponieważ wartości null dawać w wyniku nieokreślona, ich obecność w wyrażeniach mogą zastępować ograniczenia.For example, suppose you place a constraint on an int column MyColumn specifying that MyColumn can contain only the value 10 (MyColumn=10).W przypadku wstawiania wartości NULL do MojaKolumna, the Database Engine Wstawia wartość NULL, a nie zwraca błąd.

Ograniczenie typu CHECK zwraca wartość PRAWDA, gdy warunek sprawdza go nie ma wartość FAŁSZ dla każdego wiersza w tabela.Jeśli tabela, która właśnie została utworzona, nie ma żadnych wierszy, wszelkie ograniczenia CHECK w tej tabeli jest uznawany za ważny.Taka sytuacja może wygenerować nieoczekiwane wyniki, tak jak w poniższym przykładzie.

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 tabela CheckTbl. Jednak ze względu na to, że dostępne są nie wiersze w tabela w stosunku do którego ma sprawdzić stan tego ograniczenia, powiedzie się w instrukcja ALTER tabela.

Ograniczenia CHECK nie są sprawdzane podczas instrukcji DELETE.W związku z tym wykonywanie instrukcji DELETE o tabele z niektórych rodzajów ograniczeń check może powodować nieoczekiwane rezultaty.Na przykład należy wziąć pod uwagę następujące instrukcje wykonywane w odniesieniu do tabela CheckTbl.

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

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