Query lists all table (and view) constraints - primary keys, unique key constraints and indexes, foreign keys and check, default constraints, and isDisabled.

Columns#

  • SchemaName
  • Name - table or view schema and name
  • object_type - object type:
    • Table
    • View
  • constraint_type - type of constraint:
    • Primary key
    • Unique key
    • Foregin key
    • Check constraint
    • Default constraint
  • constraint_name - name of constraint or index
  • details - details of this constraint:
    • Primary key - PK column(s)
    • Unique key - UK column(s)
    • Foregin key - parent table name
    • Check constraint - check definition
    • Default constraint - column name and default value definition
  • IsDisable – it is disabled or not.
 1
 2SELECT SchemaName
 3     ,[Name]
 4     ,object_type
 5     ,constraint_type
 6     ,constraint_name
 7     ,details
 8     ,IsDisabled
 9FROM (
10     -- Index
11     SELECT SCHEMA_NAME(t.schema_id) AS SchemaName
12         ,t.[name] AS [Name]
13         ,CASE
14             WHEN t.[type] = 'U'
15                 THEN 'Table'
16             WHEN t.[type] = 'V'
17                 THEN 'View'
18             END AS [object_type]
19         ,CASE
20             WHEN c.[type] = 'PK'
21                 THEN 'Primary key'
22             WHEN c.[type] = 'UQ'
23                 THEN 'Unique constraint'
24             WHEN i.[type] = 1
25                 THEN 'Unique clustered index'
26             WHEN i.type = 2
27                 THEN 'Unique index'
28             END AS constraint_type
29         ,ISNULL(c.[name], i.[name]) AS constraint_name
30         ,SUBSTRING(column_names, 1, LEN(column_names) - 1) AS [details]
31         ,i.is_disabled AS IsDisabled
32     FROM sys.objects t
33     LEFT OUTER JOIN sys.indexes i ON t.object_id = i.object_id
34     LEFT OUTER JOIN sys.key_constraints c ON i.object_id = c.parent_object_id
35         AND i.index_id = c.unique_index_id
36     CROSS APPLY (
37         SELECT col.[name] + ', '
38         FROM sys.index_columns ic
39         INNER JOIN sys.columns col ON ic.object_id = col.object_id
40             AND ic.column_id = col.column_id
41         WHERE ic.object_id = t.object_id
42             AND ic.index_id = i.index_id
43         ORDER BY col.column_id
44         FOR XML PATH('')
45         ) D(column_names)
46     WHERE is_unique = 1
47         AND t.is_ms_shipped <> 1
48
49     UNION ALL
50
51     -- Foreign key
52     SELECT SCHEMA_NAME(fk_tab.schema_id)
53         ,fk_tab.NAME AS foreign_table
54         ,'Table'
55         ,'Foreign key'
56         ,fk.NAME AS fk_constraint_name
57         ,SCHEMA_NAME(pk_tab.schema_id) + '.' + pk_tab.NAME
58         ,fk.is_disabled AS IsDisabled
59     FROM sys.foreign_keys fk
60     INNER JOIN sys.tables fk_tab ON fk_tab.object_id = fk.parent_object_id
61     INNER JOIN sys.tables pk_tab ON pk_tab.object_id = fk.referenced_object_id
62     INNER JOIN sys.foreign_key_columns fk_cols ON fk_cols.constraint_object_id = fk.object_id
63
64     UNION ALL
65
66     -- Check constraint
67     SELECT SCHEMA_NAME(t.schema_id)
68         ,t.[name]
69         ,'Table'
70         ,'Check constraint'
71         ,con.[name] AS constraint_name
72         ,con.[definition]
73         ,con.is_disabled AS IsDisabled
74     FROM sys.check_constraints con
75     LEFT OUTER JOIN sys.objects t ON con.parent_object_id = t.object_id
76     LEFT OUTER JOIN sys.all_columns col ON con.parent_column_id = col.column_id
77         AND con.parent_object_id = col.object_id
78
79     UNION ALL
80
81     -- Default constraint
82     SELECT SCHEMA_NAME(t.schema_id)
83         ,t.[name]
84         ,'Table'
85         ,'Default constraint'
86         ,con.[name]
87         ,col.[name] + ' = ' + con.[definition]
88         ,0 AS IsDisabled
89     FROM sys.default_constraints con
90     LEFT OUTER JOIN sys.objects t ON con.parent_object_id = t.object_id
91     LEFT OUTER JOIN sys.all_columns col ON con.parent_column_id = col.column_id
92         AND con.parent_object_id = col.object_id
93     ) a
94ORDER BY SchemaName
95     ,[Name]
96     ,constraint_type
97     ,constraint_name;

Script to set nocheck on foreign key constaints

 1
 2-- Script to set nocheck on foreign key constaints
 3DECLARE @SchemaName VARCHAR(250) = NULL; -- 'dbo';
 4DECLARE @TableName VARCHAR(250) = NULL;  -- 'Client';
 5DECLARE @IDKey INT;
 6DECLARE @SqlScript VARCHAR(max);
 7
 8SET NOCOUNT ON;
 9
10DROP TABLE IF EXISTS #tb;
11
12-- Foreign key
13SELECT ROW_NUMBER() OVER(ORDER BY SCHEMA_NAME(fk_tab.schema_id), fk_tab.NAME) AS [IDKey],
14        --SCHEMA_NAME(fk_tab.schema_id),
15        --fk_tab.NAME AS foreign_table,
16        --fk.NAME AS fk_constraint_name,
17        --SCHEMA_NAME(pk_tab.schema_id) + '.' + pk_tab.NAME,
18        --fk.is_disabled AS IsDisabled,
19        'ALTER TABLE [' + SCHEMA_NAME(fk_tab.schema_id) + '].[' + fk_tab.NAME + '] NOCHECK CONSTRAINT ' + fk.NAME + ';' AS SqlScript
20INTO #tb
21FROM sys.foreign_keys fk
22      INNER JOIN sys.tables fk_tab ON fk_tab.object_id = fk.parent_object_id
23      INNER JOIN sys.tables pk_tab ON pk_tab.object_id = fk.referenced_object_id
24      INNER JOIN sys.foreign_key_columns fk_cols ON fk_cols.constraint_object_id = fk.object_id
25WHERE fk.is_disabled = 0
26AND (@SchemaName IS NULL OR @SchemaName = SCHEMA_NAME(fk_tab.schema_id))
27AND (@TableName IS NULL OR @TableName = fk_tab.NAME)
28;
29
30while ((SELECT COUNT(*) FROM #tb) > 0 )
31BEGIN
32     SELECT top 1 @IDKey=IDKey, @SqlScript = SqlScript FROM #tb ORDER BY IDKey;
33     DELETE FROM #tb WHERE @IDKey=IDKey;
34     PRINT @SqlScript;
35     --EXEC(@SqlScript);
36END;