sql - 批量插入时忽略外键约束

标签 sql sql-server foreign-keys

我想批量插入大量具有循环依赖关系的生成数据(每个表中的列是约束到另一个表的外键)。为了解决这个问题,我想关闭外键约束,插入数据,然后重新打开约束。

谷歌搜索后,我找到了很多解决方案,但没有一个有效。现在我有:

ALTER TABLE TableName NOCHECK CONSTRAINT ALL

该命令运行并且不会产生任何错误,但是当我尝试清除表以准备插入数据时,出现以下错误:

System.Data:0:in `OnError': The DELETE statement conflicted with the REFERENCE constraint "FK_1_2_ConstraintName". The conflict occurred in database "DatabaseName", table "dbo.SomeOtherTable", column 'PrimaryKey'.\r\nThe statement has been terminated.\r\nChecking identity information: current identity value '0', current column value '0'.\r\nDBCC execution completed. If DBCC printed error messages, contact your system administrator. (System::Data::SqlClient::SqlException)

我目前的理论是,这是由另一个表上的外键约束引起的,该约束取决于正在更改的表。

对于这个问题我可以想出两种解决方案:

  1. 遍历所有与我插入的表有依赖关系的表并禁用它们的外键约束。这似乎不必要地复杂。

  2. 禁用数据库中所有表的外键约束。

这两种解决方案都可以,但我不确定从哪里开始使用这两种解决方案。有什么想法吗?

最佳答案

这就是我用于此类工作的工具。

--Disable all Constraints 
exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 

-- INSERT DATA HERE

--Enable all Constraints 
exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL' 

关于sql - 批量插入时忽略外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6497675/

相关文章:

mysql - SQL计数计数两次

sql - 棘手的 Postgresql 查询

mysql - 多个 ORDER BY

sql-server - MVC 5新项目标识表到sql server

sql-server - 存储过程没有返回值

mysql - CakePHP 是在代码级别处理 FK,还是我也应该将 FK 添加到我的数据库中?

mysql - 正确的数据库?需要改吗?

sql - 如何比较同一张表中的两列?

sql-server - 为什么批量插入的错误文件不起作用?

php - Mysql表之间的关系