Disable and enable Foreign Key and Check Constraints

Foreign Key and Check Constraints can be disabled or enabled when required.

To disable a constraint use this code:

USE Database_name
GO
ALTER TABLE Table_name
NOCHECK CONSTRAINT Constraint_name
GO

To disable all table constraints:

USE Database_name
GO
ALTER TABLE Table_name
NOCHECK CONSTRAINT ALL
GO

To enable a disabled constraint with checking the existing rows use this code:

USE Database_name
GO
ALTER TABLE Table_name
WITH CHECK CHECK CONSTRAINT Constraint_name
GO

To enable all disabled table constraints with checking the existing rows:

USE Database_name
GO
ALTER TABLE Table_name
WITH CHECK CHECK CONSTRAINT ALL
GO

If you enable a constraint without checking the existing rows (WITH NOCHECK), SQL Server will mark the constraint as "not trusted". Trusted constraints help optimizer to get optimized plan and performance.
To see if you have untrusted constraints in your database run:

SELECT *
from sys.check_constraints
WHERE is_not_trusted = 1

SELECT *
from sys.foreign_keys
WHERE is_not_trusted = 1

To list all Check constraints in a database run:
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'CHECK'

To see what Check constraints are disabled run:
SELECT name, is_disabled
FROM sys.check_constraints

To list all Foreign key constraints in a database run:
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'

To see what Foreign keys are disabled run:
SELECT name, is_disabled
FROM sys.foreign_keys

If the post helped you, please share it:
Pin It

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">