【问题标题】:INSERT statement conflicted with foreign key constraint?INSERT 语句与外键约束冲突?
【发布时间】:2018-10-13 18:33:22
【问题描述】:

我现在正在处理的任务有问题。问题是:

编写一条 INSERT 语句,将此行添加到 Products 表中:

  • ProductID:下一个自动生成的ID
  • 类别 ID:4
  • 产品代码:dgx_640
  • 产品名称:Yamaha DGX 640 88键数码钢琴
  • 描述:详细描述即将到来。
  • ListPrice: 799.99
  • 折扣百分比:0
  • 添加日期:今天的日期/时间。

为该语句使用列列表。

而我想出的答案是:

INSERT INTO Products(CategoryID, ProductCode, ProductName, Description, ListPrice, DiscountPercent, DateAdded)
VALUES (4, 'dgx_640', 'Yamaha DGX 640 88-Key Digital Piano', 'Long description to come.', 799.99, 0, SYSDATETIME()) 

但是当我尝试执行它时,会出现一个错误提示

INSERT 语句与 FOREIGN KEY 约束“FK__Products__Catego__3B75D760”冲突。冲突发生在数据库“MyGuitarShop”、表“dbo.Categories”、列“CategoryID”中。 声明已终止。

任何帮助将不胜感激

【问题讨论】:

  • 问题是什么? insert 语句试图插入一行,该行的值引用另一个表,其中不存在对应的行。从约束的名称来看,它将是引用类别表中现有类别的类别值。您是否检查过类别表中有一个 CategoryID 为 4 的行?

标签: sql sql-server


【解决方案1】:

错误非常明显 - 您试图在 ProductsCategoryID 列中插入一个值,这会导致违反类别表的外键约束。

这意味着:您正在尝试将一个值 (4) 插入到 Products.CategoryID 中,该值在Category 表中不存在。外键约束的工作是完全防止这种情况 - 它不允许 允许您这样做 - 有充分的理由。

所以基本上:在执行INSERT 之前,您需要确保插入到外键列中的值确实存在在引用的表 (Category) 中。

【讨论】:

  • 我从来没有这样做过,但我不得不说“错误很明显”只是让我感觉很屈尊。我和(我假设)对 OP 都不清楚该错误,否则这篇文章可能不存在。也就是说,您的其余回答对我帮助很大。
【解决方案2】:

您试图在它引用的表中不存在的外键中插入一个值,在您的情况下它是CategoryID。 要解决这个问题,您需要先在表categoCategoryID 列中插入数字4

【讨论】:

    【解决方案3】:

    引用可能不需要强制执行。

    制作一个新的数据库图并添加两个表。右键单击它们之间的连接线,选择属性。 在它说“强制外键约束”的地方将其更改为否。 这解决了我的问题。

    您尝试插入和引用的数字也可能是作为连接表中主键的自动编号行。我只能假设这可能会导致问题,而不是让列成为它自己的可编辑列值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多