如何在 SQL Server 中禁用表的所有 CHECK 和外键约束(T-SQL 示例)

发布于

可以使用下面的代码禁用 SQL Server 中特定表的所有 CHECK 和外键约束。

只需替换为适用表的名称即可。TableName

ALTER TABLE TableName NOCHECK CONSTRAINT ALL

下面是一个我执行此操作然后检查结果的示例。

示例 1 – 查看约束

首先,我将快速查看数据库中的当前键约束和外键约束,以查看它们是启用还是禁用。CHECK

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;

输出:

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 0             | 0                |
| ConstraintTest | chkValidEndDate | 0             | 0                |
| ConstraintTest | chkTeamSize     | 0             | 0                |
| Occupation     | chkJobTitle     | 0             | 0                |
+----------------+-----------------+---------------+------------------+

因此,数据库中目前有四个约束,其中三个用于表。CHECK``ConstraintTest

我们可以看到所有约束都已启用,因为设置为 .is_disabled0

示例 2 – 禁用约束

现在,我将禁用表的所有约束:ConstraintTest

ALTER TABLE ConstraintTest NOCHECK CONSTRAINT ALL;

示例 3 – 检查结果

现在,我运行第一个示例中的相同查询以查看结果。

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;

输出:

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 1             | 1                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| ConstraintTest | chkTeamSize     | 1             | 1                |
| Occupation     | chkJobTitle     | 0             | 0                |
+----------------+-----------------+---------------+------------------+

正如预期的那样,表的所有三个约束都已禁用(因为列设置为这些约束)。ConstraintTestis_disabled1

请注意,该列也设置为 。这是一个重要的注意事项,尤其是在打算重新启用任何禁用约束时。is_not_trusted1

有关如何在重新启用约束时恢复信任的信息,请参阅在 SQL Server 中启用 CHECK 约束时应了解的有关 WITH NOCHECK 的信息。该文章中的信息也适用于外键。

单独禁用约束

如果不想禁用表中的所有约束,可以单独禁用它们。请参阅如何在 SQL Server 中禁用 CHECK 约束和如何在 SQL Server 中禁用外键。

重新启用约束

如果需要重新启用表的所有约束,请参阅如何为表启用所有 CHECK 和外键约束。

如果需要单独重新启用它们,请参阅如何在 SQL Server 中启用 CHECK 约束和如何在 SQL Server 中启用外键。