【发布时间】:2011-06-27 19:08:32
【问题描述】:
我想批量插入大量生成的具有循环依赖关系的数据(每个表中的一列是约束到另一个表的外键)。为了解决这个问题,我只想关闭外键约束,插入数据,然后重新打开约束。
谷歌搜索,我找到了一堆解决方案,但都没有奏效。现在我有:
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)
我目前的理论是,这是由另一个表上的外键约束引起的,这取决于正在更改的表。
对于这个问题,我有两种解决方案:
遍历所有依赖于我要插入的表的表,并禁用它们的外键约束。这似乎不必要地复杂。
对数据库中的所有表禁用外键约束。
任何一种解决方案都可以,但我不确定从哪一种解决方案开始。有什么想法吗?
【问题讨论】:
-
如果两个表之间存在循环依赖关系,我会非常担心。这通常意味着您有严重的设计问题。
-
@HLGEM 不是我的设计,我无法更改它。 :|
标签: sql sql-server foreign-keys