Níže uvedený kód můžete použít k deaktivaci všech CHECK
a omezení cizího klíče pro konkrétní tabulku na serveru SQL.
Stačí nahradit TableName
s názvem příslušné tabulky.
ALTER TABLE TableName NOCHECK CONSTRAINT ALL
Níže je uveden příklad, kde to udělám a poté zkontroluji výsledek.
Příklad 1 – Kontrola omezení
Nejprve se rychle podívám na aktuální CHECK
a omezení cizího klíče v databázi, abyste viděli, zda jsou povolena nebo zakázána.
SELECT OBJECT_NAME(parent_object_id) AS 'Tabulka', název AS 'Constraint', is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_checked_constraints; sys.Výsledek:
+----------------+-----------------+------------ ----+-------------------+| Tabulka | Omezení | is_disabled | není_důvěryhodný ||----------------+-----------------+------------ ---+-------------------|| Test omezení | chkCena | 0 | 0 || Test omezení | chkValidEndDate | 0 | 0 || Test omezení | chkTeamSize | 0 | 0 || Povolání | chkJobTitle | 0 | 0 |+----------------+-----------------+------------- ---+------------------+Aktuálně tedy existují čtyři
CHECK
omezení v databázi, z nichž tři jsou proConstraintTest
tabulka.Vidíme, že všechna omezení jsou povolena, protože is_disabled je nastaveno na 0 .
Příklad 2 – Deaktivace omezení
Nyní deaktivuji všechna omezení pro
ConstraintTest
tabulka:ALTER TABLE ConstraintTest NOCHECK CONSTRAINT ALL;Příklad 3 – Kontrola výsledku
Nyní spustím stejný dotaz z prvního příkladu, abych viděl výsledek.
SELECT OBJECT_NAME(parent_object_id) AS 'Tabulka', název AS 'Constraint', is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_checked_constraints; sys.Výsledek:
+----------------+-----------------+------------ ----+-------------------+| Tabulka | Omezení | is_disabled | není_důvěryhodný ||----------------+-----------------+------------ ---+-------------------|| Test omezení | chkCena | 1 | 1 || Test omezení | chkValidEndDate | 1 | 1 || Test omezení | chkTeamSize | 1 | 1 || Povolání | chkJobTitle | 0 | 0 |+----------------+-----------------+------------- ---+------------------+Jak se očekávalo, všechna tři omezení pro ConstraintTest tabulky byly zakázány (protože is_disabled sloupec je nastaven na 1 pro tato omezení).
Všimněte si, že is_not_trusted sloupec je také nastaven na 1 . Toto je důležité zvážit, zvláště pokud máte v úmyslu znovu povolit některé ze svých zakázaných omezení.
Informace o tom, jak obnovit důvěryhodnost při opětovném povolení vašich omezení, najdete v části Co byste měli vědět o WITH NOCHECK při povolování omezení CHECK v SQL Server. Informace v tomto článku platí také pro cizí klíče.
Deaktivujte omezení jednotlivě
Pokud nechcete deaktivovat všechna omezení v tabulce, můžete je deaktivovat jednotlivě. Viz Jak zakázat omezení CHECK na serveru SQL Server a Jak zakázat cizí klíč na serveru SQL.
Znovu povolte omezení
Pokud potřebujete znovu povolit všechna omezení pro tabulku, přečtěte si část Jak povolit omezení VŠECHNY KONTROLA a omezení cizích klíčů pro tabulku.
Pokud je potřebujete znovu povolit jednotlivě, přečtěte si část Jak povolit omezení CHECK na serveru SQL Server a Jak povolit cizí klíč na serveru SQL.