INSERT语句与外键约束冲突?

时间:2018-10-13 18:33:22

标签: sql sql-server

我目前正在处理的作业遇到问题。问题是:

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

  • ProductID:下一个自动生成的ID
  • 类别ID:4
  • 产品代码:dgx_640
  • 产品名称:雅马哈DGX 640 88键数码钢琴
  • 说明:详细说明。
  • 标价:799.99
  • DiscountPercent: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”中发生了冲突。   该声明已终止。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

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

这意味着:您正试图在Products表中不存在的值4中插入值(Products.CategoryID。外键约束的工作是完全防止这种情况-出于充分的理由,不允许允许您这样做。

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

答案 1 :(得分:0)

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