Puoi usare il codice qui sotto per disabilitare tutti i CHECK
e vincoli di chiave esterna per una tabella specifica in SQL Server.
Sostituisci semplicemente TableName
con il nome della tabella applicabile.
ALTER TABLE TableName NOCHECK CONSTRAINT ALL
Di seguito è riportato un esempio in cui lo faccio e poi controllo il risultato.
Esempio 1:rivedere i vincoli
Per prima cosa, darò una rapida occhiata all'attuale CHECK
e vincoli di chiave esterna nel database, per vedere se sono abilitati o disabilitati.
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;
Risultato:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 0 | | ConstraintTest | chkValidEndDate | 0 | 0 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
Quindi ci sono attualmente quattro CHECK
vincoli nel database, tre dei quali sono per il ConstraintTest
tabella.
Possiamo vedere che tutti i vincoli sono abilitati perché is_disabled è impostato su 0 .
Esempio 2:disabilitare i vincoli
Ora disabiliterò tutti i vincoli per il ConstraintTest
tabella:
ALTER TABLE ConstraintTest NOCHECK CONSTRAINT ALL;
Esempio 3:verifica del risultato
Ora eseguo la stessa query del primo esempio per vedere il risultato.
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;
Risultato:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 1 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 1 | 1 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
Come previsto, tutti e tre i vincoli per ConstraintTest sono state disabilitate (perché is_disabled la colonna è impostata su 1 per quei vincoli).
Nota che il non_è attendibile anche la colonna è impostata su 1 . Questa è una considerazione importante, soprattutto se intendi riattivare uno dei tuoi vincoli disabilitati.
Per informazioni su come ripristinare l'attendibilità durante la riattivazione dei vincoli, vedere cosa dovresti sapere con NOCHECK quando si abilita un vincolo CHECK in SQL ServerSQL Server. Le informazioni in tale articolo si applicano anche alle chiavi esterne.
Disabilita i vincoli singolarmente
Se non vuoi disabilitare tutti i vincoli nella tabella, puoi disabilitarli singolarmente. Vedere Come disabilitare un vincolo CHECK in SQL Server e Come disabilitare una chiave esterna in SQL Server.
Riattiva i vincoli
Se è necessario riattivare tutti i vincoli per una tabella, vedere Come abilitare ALL CHECK e i vincoli di chiave esterna per una tabella.
Se è necessario riattivarli singolarmente, vedere Come abilitare un vincolo CHECK in SQL Server e Come abilitare una chiave esterna in SQL Server.