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.