Sql-Server
靜默啟用約束失敗
為什麼 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
)。重新啟用約束的語法如下:
ALTER TABLE <tablename> WITH { CHECK | NOCHECK } CHECK CONSTRAINT <constraintname>;
WITH CHECK|NOCHECK
告訴 SQL Server 是否要根據約束檢查表中的現有數據。如果您NOCHECK
在此處聲明,那麼您的約束將不受信任,由is_not_trusted = 1
in定義sys.foreign_keys
。通過陳述
NOCHECK
為第二部分,您實際上是在說disable the constraint。在您的情況下,如果您不想檢查現有數據,則需要
NOCHECK CHECK
.ALTER TABLE [dbo].[Table] WITH NOCHECK CHECK CONSTRAINT FK_ConstraintName;