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)
您面临的问题是您实际上并没有重新启用您的约束(由 定义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 = 1
in定义sys.foreign_keys
。
通过陈述NOCHECK
作为第二部分,你其实是说禁止的约束。
在您的情况下,如果您不想检查现有数据,则需要NOCHECK CHECK
.
ALTER TABLE [dbo].[Table] WITH NOCHECK CHECK CONSTRAINT FK_ConstraintName;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
311 次 |
最近记录: |