Ograniczenia CHECK

Sprawdzanie wymusić ograniczenia integralność domena przez ograniczenie wartości, które są akceptowane przez kolumna.Są one podobne ograniczenia klucza OBCEGO, w tym kontroli ich wartości, które są wprowadzane kolumna.Różnica jest w sposób określają, którego wartości są prawidłowe: Ograniczenia klucza OBCEGO uzyskać listę prawidłowych wartości z innej tabela i ograniczeń CHECK określić prawidłowe wartości z wyrażenie logicznego, który nie jest oparty na danych w innym kolumna.Na przykład, zakres wartości dla wynagrodzenie kolumna można ograniczone poprzez utworzenie ograniczenia wyboru umożliwiająca danych do zakresu od 15 000 $ 100 000 USD za pośrednictwem.Zapobiega to wprowadzanego poza zakres regularnych wynagrodzenia wynagrodzenia.

Logiczne wyrażenie (wartość logiczna), który zwraca wartość PRAWDA lub FAŁSZ, oparty na operatorów logicznych można utworzyć ograniczenia CHECK.W poprzednim przykładzie wyrażenie logiczne jest: salary >= 15000 AND salary <= 100000.

Do jednej kolumna, można zastosować wiele ograniczeń CHECK.Za dotyczą pojedynczego ograniczenia CHECK i wiele kolumn tworząc poziom tabela.Na przykład wiele kolumn typu CHECK można potwierdzić, że dowolny wiersz z kraju i region wartości kolumna USA również ma wartość dwóch znaków w Państwo kolumna.Pozwala to wielu warunków, które mają być sprawdzane w jednej lokalizacji.

PrzestrogaPrzestroga

Ograniczenia, które zawierają dane bezpośrednia lub pośrednia konwersja typu może spowodować niepowodzenie pewnych operacji.Na przykład takie ograniczenia zdefiniowane dla tabel partycji przełączania źródła może spowodować ALTER TABLE...PRZEŁĄCZ niepowodzenie operacji.Należy unikać konwersja typu danych w definicjach ograniczenie.

Ograniczenia ograniczeń CHECK

Ograniczenia CHECK odrzucenia wartości, które mają wartość FALSE.Ponieważ nieznany przyjmują wartości null, ich obecność w wyrażeniach mogą zastąpić ograniczenia.For example, suppose you place a constraint on an int column MyColumn specifying that MyColumn can contain only the value 10 (MyColumn=10).Podczas wstawiania wartości NULL do MojaKolumna, Aparat baz danych wstawia NULL i nie zwraca błąd.

Ograniczenie typu CHECK zwraca wartość PRAWDA, gdy warunek jest sprawdzanie nie jest wartość FALSE dla każdego wiersza w tabela.Jeśli właśnie utworzony tabela nie ma żadnych wierszy, wszelkie ograniczenia CHECK na tej tabela jest uważane za ważne.Taka sytuacja może wygenerować nieoczekiwane wyniki, 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

CHECK Ograniczenie dodawany Określa, że musi istnieć przynajmniej jeden wiersz w tabela CheckTbl.Jednakże ponieważ istnieje żadne wiersze w tabela, przeciwko której Sprawdź stan tego ograniczenia, powiedzie się w instrukcja ALTER tabela.

Sprawdź ograniczenia nie są sprawdzane podczas instrukcji DELETE.Zatem wykonywanie instrukcji DELETE na tabelach z niektórych rodzajów ograniczeń check może dać nieoczekiwane wyniki.Na przykład, rozważmy następujące instrukcje wykonywane w tabela CheckTbl.

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

DELETE instrukcja skutku, nawet jeśli CHECK tabela określa ograniczenia CheckTbl musi mieć co najmniej 1 wiersza.