我在 SSMS 2016 中使用此命令
EXEC sp_fkeys mytable1
并且我有超过 30 个 FK 约束引用此表中的列。如何一次性删除所有约束,执行一些截断工作(需要将表从一台服务器复制到另一台服务器)并将它们全部添加回来?
最佳答案
不要删除约束并重新添加它们,这会带来大量不必要的工作,只需禁用并启用它们即可。
将代码放在这两行之间:
ALTER TABLE mytable1 NOCHECK CONSTRAINT ALL
-- put your code here. Example: DELETE FROM mytable1
ALTER TABLE mytable1 CHECK CONSTRAINT ALL
根据您的表关系,您可能需要禁用引用您表的其他表的约束。例如,如果您需要禁用两个表上的约束:
ALTER TABLE mytable1 NOCHECK CONSTRAINT ALL
ALTER TABLE mytable2 NOCHECK CONSTRAINT ALL
-- put your code here. Example: DELETE FROM mytable1
ALTER TABLE mytable2 CHECK CONSTRAINT ALL
ALTER TABLE mytable1 CHECK CONSTRAINT ALL
如果您想禁用和启用数据库中的所有约束(不推荐,除非您知道自己在做什么),您可以使用:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
-- put your code here. Example: DELETE FROM mytable1
EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
关于sql-server - 如何删除引用表的所有 FK 约束并将它们添加回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49881261/