Gdy próbujesz wprowadzić dane do tabeli, która ma w pełni włączoną opcję CHECK
ograniczenie, odniesiesz sukces tylko wtedy, gdy dane nie naruszają tego ograniczenia. Jeśli spróbujesz wprowadzić nieprawidłowe dane, operacja zakończy się błędem.
Ale co, jeśli znajdziesz się w sytuacji, w której naprawdę musisz wstawiaj dane, które naruszą CHECK
ograniczenie? Być może ograniczenie już nie obowiązuje, a może masz wyjątek, w którym jeden wiersz może ominąć ograniczenie. Tak czy inaczej, nie będziesz w stanie wprowadzić niczego poza regułami ograniczenia.
Jeśli znajdziesz się w takiej sytuacji, zawsze możesz wyłączyć ograniczenie. Oto jak to zrobić za pomocą Transact-SQL.
Przykład 1 – Wyłącz ograniczenie SPRAWDŹ
Aby wyłączyć CHECK
ograniczenie, użyj NOCHECK
argument w ALTER TABLE
oświadczenie.
Tak:
ALTER TABLE Occupation NOCHECK CONSTRAINT chkJobTitle;
Ten kod wyłącza ograniczenie o nazwie chkJobTitle .
Przykład 2 – Przejrzyj ograniczenie SPRAWDŹ
Możemy zapytać o sys.check_constraints
widok systemu, aby sprawdzić, czy nasze ograniczenie zostało wyłączone:
SELECT name, is_disabled, is_not_trusted, definition FROM sys.check_constraints;
Wynik:
+-----------------+---------------+------------------+----------------------------------------+ | name | is_disabled | is_not_trusted | definition | |-----------------+---------------+------------------+----------------------------------------| | chkPrice | 0 | 0 | ([Price]>(0)) | | chkValidEndDate | 0 | 0 | ([EndDate]>=[StartDate]) | | chkTeamSize | 0 | 0 | ([TeamSize]>=(5) AND [TeamSize]<=(20)) | | chkJobTitle | 1 | 1 | ([JobTitle]<>'Digital Nomad') | +-----------------+---------------+------------------+----------------------------------------+
W tym przypadku zaznaczyłem wszystkie CHECK
ograniczenia z bieżącej bazy danych.
Widzimy, że jest to jedyny wyłączony (ponieważ jego is_disabled kolumna jest ustawiona na 1 ).
Możesz zauważyć, że
jest_nie_zaufany
kolumna jest również ustawiona na
1
. Oznacza to, że CHECK
ograniczenie nie zostało zweryfikowane przez system dla wszystkich wierszy.
Innymi słowy, nie możemy już zakładać, że ograniczenie sprawdziło wszystkie dane. Fakt, że ograniczenie jest wyłączone, oznacza, że dane są teraz w stanie dostać się do bazy danych bez sprawdzania przez ograniczenie. Dlatego istnieje możliwość, że w bazie danych znajdą się nieprawidłowe dane.
Jeśli kiedykolwiek będziesz musiał ponownie włączyć CHECK
ograniczenia, będziesz miał możliwość przywrócenia zaufania ograniczenia (poprzez użycie WITH CHECK
opcja). Spowoduje to sprawdzenie wszystkich istniejących wierszy przed włączeniem ograniczenia.
Będziesz mieć również możliwość nie sprawdzanie istniejących danych, ale należy to robić tylko w rzadkich przypadkach.
Zobacz, co powinieneś wiedzieć o funkcji NOCHECK podczas włączania ograniczenia CHECK w SQL Server, aby zademonstrować, w jaki sposób wpływa to na zaufanie, w zależności od tego, jak ponownie włączysz ograniczenie.