为什么 SQL Server 会默默地重新启用外键约束失败?
我最近尝试使用ALTER TABLE
. 大多数启用成功;但是,少数约束仍被报告为已禁用sys.foreign_keys
。
例子:
ALTER TABLE [dbo].[Table] WITH CHECK NOCHECK CONSTRAINT FK_ConstraintName;
-- Command(s) completed successfully.
SELECT is_disabled FROM sys.foreign_keys
WHERE name = 'FK_Constraint' AND parent_object_id = OBJECT_ID('[dbo].[Table]');
-- returns "1", indicating that the constraint is still disabled
您面临的问题是您实际上并没有重新启用您的约束(由 定义
NOCHECK
)。重新启用约束的语法如下:
WITH CHECK|NOCHECK
告诉 SQL Server 是否要根据约束检查表中的现有数据。如果您NOCHECK
在此处声明,那么您的约束将不受信任,由is_not_trusted = 1
in定义sys.foreign_keys
。NOCHECK
作为第二部分,您实际上是在说disable the constraint。在您的情况下,如果您不想检查现有数据,则需要
NOCHECK CHECK
.进一步阅读有关相信您的约束的内容。