我在 MSDN 杂志上看到了这个。我想暂时禁用外键,我可以使用以下代码吗。不需要删除但暂时禁用,因为我想再次启用
ALTER TABLE Orders
NOCHECK CONSTRAINT
FK_Orders_Customers
我在 MSDN 杂志上看到了这个。我想暂时禁用外键,我可以使用以下代码吗。不需要删除但暂时禁用,因为我想再次启用
ALTER TABLE Orders
NOCHECK CONSTRAINT
FK_Orders_Customers
-- 禁用约束。
ALTER TABLE Orders NOCHECK CONSTRAINT FK_Orders_Customers
-- 重新启用约束。
ALTER TABLE Orders WITH CHECK CHECK CONSTRAINT FK_Orders_Customers
是的,正如您所怀疑的那样,ALTER TABLE [table] CHECK / NOCHECK CONSTRAINT *FK_Name*
启用和禁用外键约束检查。它还证明了为什么明确命名约束是一个好主意,即避免使用FK__TABLE__A2A64E930CBAE877
.
需要注意的一点是,在使用禁用的外键约束插入/更改数据之后,如果您只是使用 CHECK CONSTRAINT 启用它,SQL 将不会信任您的约束。您需要执行以下操作以使 SQL 在重新启用期间重新检查约束:
ALTER TABLE [table] WITH CHECK CHECK CONSTRAINT *FK_Name*
您可以检查违规行为
DBCC CHECKCONSTRAINTS ([table])
参考: http: //msdn.microsoft.com/en-us/library/ms177456 (v=sql.90).aspx(禁用约束),另请参阅http://geekswithblogs.net/dturner/archive/2011/01 /31/sql-constraints-check-and-nocheck.aspx