Když se pokusíte zadat data do tabulky, která má plně povolenou možnost CHECK
omezení, budete úspěšní pouze tehdy, pokud data toto omezení neporuší. Pokud se pokusíte zadat neplatná data, operace selže s chybou.
Ale co když se ocitnete v situaci, kdy opravdu musíte vložte data, která poruší CHECK
omezení? Možná již omezení neplatí, nebo možná máte výjimku, kdy jeden řádek může omezení obejít. V každém případě nebudete moci zadat nic mimo pravidla omezení.
Pokud se ocitnete v této situaci, vždy můžete omezení deaktivovat. Zde je návod, jak to udělat pomocí Transact-SQL.
Příklad 1 – Deaktivace omezení CHECK
Chcete-li zakázat CHECK
omezení, použijte NOCHECK
argument v ALTER TABLE
prohlášení.
Takhle:
ALTER TABLE Occupation NOCHECK CONSTRAINT chkJobTitle;
Tento kód deaktivuje omezení zvané chkJobTitle .
Příklad 2 – Zkontrolujte omezení CHECK
Můžeme se zeptat na sys.check_constraints
systémové zobrazení pro ověření, že naše omezení bylo deaktivováno:
SELECT name, is_disabled, is_not_trusted, definition FROM sys.check_constraints;
Výsledek:
+-----------------+---------------+------------------+----------------------------------------+ | 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') | +-----------------+---------------+------------------+----------------------------------------+
V tomto případě jsem vybral všechny CHECK
omezení z aktuální databáze.
Vidíme, že toto je jediné, které je zakázáno (protože jeho is_disabled sloupec je nastaven na 1 ).
Můžete si všimnout, že
is_not_trusted
sloupec je také nastaven na
1
. To znamená, že CHECK
omezení nebylo ověřeno systémem pro všechny řádky.
Jinými slovy, již nemůžeme předpokládat, že omezení zkontrolovalo všechna data. Skutečnost, že omezení je zakázáno, znamená, že data se nyní mohou dostat do databáze, aniž by je omezení kontrolovalo. Proto existuje možnost, že v databázi budou přítomna neplatná data.
Pokud budete někdy potřebovat znovu povolit CHECK
omezení, budete mít příležitost obnovit důvěru omezení (pomocí WITH CHECK
volba). To zkontroluje všechny existující řádky před povolením omezení.
Budete mít také možnost ne kontrola existujících dat, ale to by mělo být prováděno pouze ve výjimečných případech.
Podívejte se, o čem byste měli vědět S NOCHECK při povolování omezení CHECK na serveru SQL Server, kde je ukázka ovlivnění důvěryhodnosti v závislosti na tom, jak omezení znovu povolíte.