静默启用约束失败

Ben*_*udo 4 sql-server-2005 foreign-key sql-server constraint

为什么 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
Run Code Online (Sandbox Code Playgroud)

Mar*_*son 8

您面临的问题是您实际上并没有重新启用您的约束(由 定义NOCHECK)。

重新启用约束的语法如下:

ALTER TABLE <tablename>
WITH { CHECK | NOCHECK }
CHECK CONSTRAINT <constraintname>;
Run Code Online (Sandbox Code Playgroud)

WITH CHECK|NOCHECK您是否要检查中对约束表中现有数据告诉SQL Server中。如果您NOCHECK在此处声明,那么您的约束将不受信任,由is_not_trusted = 1in定义sys.foreign_keys

通过陈述NOCHECK作为第二部分,你其实是说禁止的约束

在您的情况下,如果您不想检查现有数据,则需要NOCHECK CHECK.

ALTER TABLE [dbo].[Table] WITH NOCHECK CHECK CONSTRAINT FK_ConstraintName; 
Run Code Online (Sandbox Code Playgroud)

进一步阅读信任你的约束

  • 我讨厌这种语法。如果 nocheck 可以检查,nocheck 可以检查多少检查。 (9认同)