我想批量插入大量生成的数据,其中存在循环依赖(每个表中的一列都是外键约束到另一个表)。为了解决这个问题,我希望关闭外键约束,插入数据,然后再打开约束。
我在网上搜索了许多解决方案,但没有一个可行的。目前我有以下代码:
我的当前理论是,这是由于另一张表上的外键约束依赖于正在更改的表所导致的。
我能想到两个解决方案:
1. 遍历所有依赖于我要插入的表的表,并禁用它们的外键约束。这似乎过于复杂。 2. 禁用数据库中所有表的外键约束。
任何一个解决方案都可以解决问题,但我不确定从哪里开始处理。有什么建议吗?
我在网上搜索了许多解决方案,但没有一个可行的。目前我有以下代码:
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. 禁用数据库中所有表的外键约束。
任何一个解决方案都可以解决问题,但我不确定从哪里开始处理。有什么建议吗?