SQL Management Studio插入语句冲突

时间:2010-10-29 12:55:39

标签: ssms

我正在为我的老板创建一个开发数据库。我有创建所有表的SQL脚本,但现在我要导入大量数据。数据库中总共有5个表,它们的ID彼此相关:

注意:我不允许分享数据库/表名等信息

Table1
+-- Table2
    +-- Table3
        +-- Table4
            +-- Table5

意味着Table 5有一个指向Table 4 ID的字段,依此类推。

所以我正在做一堆这样的插入:

INSERT INTO [dbo].[Table2] (Table1_ID, AnotherField) VALUES (159268, 408659)

但它会为每个人抛出这个例外:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_TABLE2_TABLE1". The conflict occurred in database "--removed by author--", table "dbo.TABLE1", column 'TABLE1_ID'.

修改 所以问题是我需要先在Table1中插入数据。所以我的老板找到了一些足以满足Table1的数据......所以问题解决了:)

3 个答案:

答案 0 :(得分:1)

没有太多要添加的内容 - 错误信息非常清楚。

您正尝试在表2中插入ID值,但Table1中不存在该ID值。因此错误信息。

在插入Table2

之前,需要将数据插入Table1

编辑:

如果Table1没有数据,则很难想到数据库约束。您必须从表2中删除约束。

然后你必须向他们询问Table1的数据。

答案 1 :(得分:0)

  1. 您应该执行自上而下的导入:首先从Table1导入所有记录,然后导入Table2等。
  2. 或者,为了简化操作并获得更快的体验,您可以在执行前禁用所有约束,并在完成后重新启用它们。请看这里:How can foreign key constraints be temporarily disabled using T-SQL?
  3. 编辑:

    好吧,如果您没有Table1数据,那么您可以删除引用Table1的所有外键约束(可能来自Table2)。或者,您可以尝试生成“假”Table1数据,同时考虑Table1(aaarrgh)上可用的所有Table2个ID。

答案 2 :(得分:0)

您可以暂时禁用外键约束,执行插入操作,然后使用CHECKNOCHECK重新启用它。

WITH NOCHECK CONSTRAINT禁用约束并允许通常违反约束的插入。

WITH CHECK CONSTRAINT重新启用约束。

以下是detailed explanation如何执行此操作。