错误:INSERT语句与FOREIGN KEY约束冲突

时间:2014-08-25 12:28:04

标签: sql asp.net-mvc foreign-key-relationship

业务用户请求我将下拉列表更改为文本框以创建记录。下拉列表是默认创建的与数据库中的表相关的内容。根据要求,我进行了更改,并用@ Html.EditorFor元素替换了下拉列表。我现在在尝试创建记录时收到此错误消息。是否有可能解决此错误的解决方案?没有任何语法错误阻止我编译代码。运行时会发生此错误。

3 个答案:

答案 0 :(得分:1)

这意味着您的前瞻性思维数据库设计者在数据库中放置了一个约束来阻止人们输入无效值。您的应用程序允许用户输入无效值,但幸运的是您的数据库正在停止它。

外键是指如何确保表只从有效列表中获取“查找”值。

如果删除约束,则可能会将垃圾放入数据库,这是一项很难解决的问题。

如果您开始在此表中添加无效值,则表示inner joins之类的内容将停止工作,并且报告中的数据开始丢失。

答案 1 :(得分:0)

以前使用下拉列表,您允许用户从预定义值中进行选择,即您的查找表中存在的值已放入外键约束的值。但现在用户可以输入任何值(可能不会出现在外表中),从而导致出现此错误。

要删除此错误,您可以删除约束

ALTER TABLE <TABLE_NAME> DROP CONSTRAINT <FOREIGN_KEY_NAME>

或在插入之前检查用户输入的值(对外键表)。

<强>更新

如果您已删除外键约束,那么您必须在查找表中插入任何 new (您必须检查数据是新数据还是旧数据),分配它ID然后在主表中插入此new ID以创建两者之间的链接。注意:在这种情况下,您可以保留the foreign key constraint

答案 2 :(得分:0)

需要更多信息,例如要插入的表和外键。可能输入的文本与下拉列表的文本不匹配。您可能必须删除外键。但是如果设计是插入一个数值而不仅仅是文本一个,那么用户现在有一个文本区域...其中是数值(我假设这里有一些设计,这就是我要求表和键的原因) )?我可能会做以下事情:

  1. 更改表结构,以便插入的值是基于字符的(如果尚未)
  2. 删除键约束
  3. 更新现有记录,以便查找值的文本替换数值(假设是外键的数字设计。
  4. 删除原始查找表。
  5. 更改设计,因此代码在剩余表格中的列上使用distinct作为其值列表。
  6. 另一种方法是你必须先将新文本值插入查找表,然后获取它的新键值,然后执行insert语句。我想这可以通过触发器和更新前的语句处理,但问题是;但除非有理由将它们分开,否则以上编号的列表从长远来看似乎更简单