暂时禁用外键?

时间:2012-06-21 06:18:39

标签: sql sql-server-2008

我在MSDN杂志中看到过这个。我想临时禁用外键,我可以使用以下代码吗...不需要删除但是暂时禁用因为我想再次启用

ALTER TABLE Orders
NOCHECK CONSTRAINT 
    FK_Orders_Customers

2 个答案:

答案 0 :(得分:3)

- 禁用约束。

ALTER TABLE Orders NOCHECK CONSTRAINT FK_Orders_Customers

- 启用约束。

ALTER TABLE Orders WITH CHECK CHECK CONSTRAINT FK_Orders_Customers

答案 1 :(得分:3)

是的,因为您怀疑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