sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan deaktiveres alle CHECK &fremmednøglebegrænsninger for en tabel i SQL Server (T-SQL-eksempler)

Du kan bruge koden nedenfor til at deaktivere alle CHECK og fremmednøgle begrænsninger for en specifik tabel i SQL Server.

Bare udskift TableName med navnet på den relevante tabel.

ALTER TABLE TableName NOCHECK CONSTRAINT ALL

Nedenfor er et eksempel, hvor jeg gør dette og derefter tjekker resultatet.

Eksempel 1 – Gennemgå begrænsningerne

Først vil jeg tage et hurtigt kig på den aktuelle CHECK og fremmednøgle-begrænsninger i databasen for at se, om de er aktiveret eller deaktiveret.

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å der er i øjeblikket fire CHECK begrænsninger i databasen, hvoraf tre er til ConstraintTest tabel.

Vi kan se, at alle begrænsninger er aktiveret, fordi er_deaktiveret er indstillet til 0 .

Eksempel 2 – Deaktiver begrænsningerne

Nu vil jeg deaktivere alle begrænsninger for ConstraintTest tabel:

ALTER TABLE ConstraintTest 
NOCHECK CONSTRAINT ALL;

Eksempel 3 – Tjek resultatet

Nu kører jeg den samme forespørgsel fra det første eksempel for at 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 forventet, alle tre begrænsninger for ConstraintTest tabellen er blevet deaktiveret (fordi er_deaktiveret kolonne er indstillet til 1 for disse begrænsninger).

Bemærk, at is_not_trusted kolonne er også indstillet til 1 . Dette er en vigtig overvejelse, især hvis du har til hensigt at genaktivere nogen af ​​dine deaktiverede begrænsninger.

Se Hvad du bør vide om MED NOCHECK, når du aktiverer en CHECK-begrænsning i SQL Server for at få oplysninger om, hvordan du genopretter tillid, når du genaktiverer dine begrænsninger. Oplysningerne i den artikel gælder også for fremmednøgler.

Deaktiver begrænsningerne individuelt

Hvis du ikke vil deaktivere alle begrænsninger i tabellen, kan du deaktivere dem individuelt. Se, hvordan du deaktiverer en CHECK-begrænsning i SQL Server, og hvordan du deaktiverer en fremmednøgle i SQL Server.

Genaktiver begrænsningerne

Hvis du har brug for at genaktivere alle begrænsninger for en tabel, se Sådan aktiverer du ALLE KONTROL og begrænsninger for fremmednøgle for en tabel.

Hvis du har brug for at genaktivere dem individuelt, se Sådan aktiverer du en CHECK-begrænsning i SQL Server og og Sådan aktiverer du en fremmednøgle i SQL Server.


  1. VIS TABELLER i MySQL

  2. SSIS-pakken ønsker ikke at hente metadata fra den midlertidige tabel

  3. MariaDB navngivne kommandoer

  4. Hvordan bruger man MySQLdb med Python og Django i OSX 10.6?