sql-server - 如何删除引用表的所有 FK 约束并将它们添加回来?

标签 sql-server foreign-keys truncate

我在 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/

相关文章:

MySQL 截断挂起

sql-server - 在存储过程中的截断表上发生错误

sql-server - SQL SERVER 检查约束中的 NOT NULL 子句

在apache下连接到mssql时PHP超时

MySQL/MariaDB - 查询通过引用表在表中搜索

MySQL 无法添加外键约束

c# - 尝试将字节数组插入数据库时​​从 varchar 隐式转换为 varbinary 错误

mysql - Yii 外键

MySQL 截断 GROUP_CONCAT 函数的连接结果

linux - 通过 'truncate -s' 创建的文件无法获得预期大小