admin

暂时关闭约束 (MS SQL)

sql

我正在寻找一种方法来暂时关闭所有数据库的约束(例如表关系)。

我需要将一个数据库的表复制(使用插入)到另一个数据库。我知道我可以通过以正确的顺序执行命令(不破坏关系)来实现这一点。

但是如果我可以暂时关闭检查约束并在操作完成后重新打开它会更容易。

这可能吗?


阅读 222

收藏
2021-07-01

共2个答案

admin

ALTER TABLE foo NOCHECK CONSTRAINT ALL

或者

ALTER TABLE foo NOCHECK CONSTRAINT CK_foo_column

主键和唯一约束不能被禁用,但如果我理解正确的话,这应该没问题。

2021-07-01
小编典典

-- Disable the constraints on a table called tableName:
ALTER TABLE tableName NOCHECK CONSTRAINT ALL

-- Re-enable the constraints on a table called tableName:
ALTER TABLE tableName WITH CHECK CHECK CONSTRAINT ALL
---------------------------------------------------------

-- Disable constraints for all tables:
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'

-- Re-enable constraints for all tables:
EXEC sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL'
---------------------------------------------------------
2021-07-08