sql >> Databáze >  >> RDS >> Sqlserver

Jak zakázat všechna omezení CHECK a cizích klíčů pro tabulku na serveru SQL (příklady T-SQL)

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 pro ConstraintTest 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.


  1. Přístup ke vzdálené databázi mysql z příkazového řádku

  2. T-SQL úterý #67:Nové zálohování a obnovení rozšířených událostí

  3. Jak zkontrolovat, zda tabulka v daném schématu existuje

  4. Pořadí SQL podle počtu