sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man inaktiverar alla CHECK &främmande nyckelbegränsningar för en tabell i SQL Server (T-SQL-exempel)

Du kan använda koden nedan för att inaktivera alla CHECK och främmande nyckelbegränsningar för en specifik tabell i SQL Server.

Byt bara ut TableName med namnet på den tillämpliga tabellen.

ALTER TABLE TableName NOCHECK CONSTRAINT ALL

Nedan är ett exempel där jag gör detta och sedan kontrollerar resultatet.

Exempel 1 – Granska begränsningarna

Först ska jag ta en snabb titt på den nuvarande CHECK och främmande nyckelbegränsningar i databasen, för att se om de är aktiverade eller inaktiverade.

SELECT
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled, 
  is_not_trusted
FROM sys.foreign_keys
UNION
SELECT 
  OBJECT_NAME(parent_object_id),
  name,
  is_disabled, 
  is_not_trusted
FROM sys.check_constraints;

Resultat:

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 0             | 0                |
| ConstraintTest | chkValidEndDate | 0             | 0                |
| ConstraintTest | chkTeamSize     | 0             | 0                |
| Occupation     | chkJobTitle     | 0             | 0                |
+----------------+-----------------+---------------+------------------+

Så det finns för närvarande fyra CHECK begränsningar i databasen, varav tre är för ConstraintTest bord.

Vi kan se att alla begränsningar är aktiverade eftersom är_avaktiverad är inställd på 0 .

Exempel 2 – Inaktivera begränsningarna

Nu kommer jag att inaktivera alla begränsningar för ConstraintTest tabell:

ALTER TABLE ConstraintTest 
NOCHECK CONSTRAINT ALL;

Exempel 3 – Kontrollera resultatet

Nu kör jag samma fråga från det första exemplet för att se resultatet.

SELECT
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled, 
  is_not_trusted
FROM sys.foreign_keys
UNION
SELECT 
  OBJECT_NAME(parent_object_id),
  name,
  is_disabled, 
  is_not_trusted
FROM sys.check_constraints;

Resultat:

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 1             | 1                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| ConstraintTest | chkTeamSize     | 1             | 1                |
| Occupation     | chkJobTitle     | 0             | 0                |
+----------------+-----------------+---------------+------------------+

Som förväntat, alla tre begränsningarna för ConstraintTest tabellen har inaktiverats (eftersom is_disabled kolumnen är inställd på 1 för dessa begränsningar).

Lägg märke till att is_not_trusted kolumnen är också inställd på 1 . Detta är ett viktigt övervägande, särskilt om du tänker återaktivera någon av dina inaktiverade begränsningar.

Se Vad du bör veta om MED NOCHECK när du aktiverar en CHECK-begränsning i SQL Server för information om hur du återställer förtroende när du återaktiverar dina begränsningar. Informationen i den artikeln gäller även främmande nycklar.

Inaktivera begränsningarna individuellt

Om du inte vill inaktivera alla begränsningar i tabellen kan du inaktivera dem individuellt. Se hur man inaktiverar en CHECK-begränsning i SQL Server och hur man inaktiverar en främmande nyckel i SQL Server.

Återaktivera begränsningarna

Om du behöver återaktivera alla begränsningar för en tabell, se Hur du aktiverar ALLA KONTROLL och begränsningar för främmande nyckel för en tabell.

Om du behöver återaktivera dem individuellt, se Hur man aktiverar en CHECK-begränsning i SQL Server och och Hur man aktiverar en främmande nyckel i SQL Server.


  1. Simulerar MySQL:s ORDER BY FIELD() i Postgresql

  2. MySQL Master To Master Replikering

  3. Sammanföra två tabeller med olika antal kolumner

  4. Varför återvänder pg_restore framgångsrikt men återställer inte min databas?