为什么向tblDomare表中添加外键会导致此错误?

ALTER TABLE语句与外键约束“FK__tblDomare__PersN__5F7E2DAC”冲突。数据库“almu0004”,表“dbo”发生冲突。tblBana”,列“BanNR”。

Code

CREATE TABLE tblDomare
(PersNR VARCHAR (15) NOT NULL,
fNamn VARCHAR (15) NOT NULL,
eNamn VARCHAR (20) NOT NULL,
Erfarenhet VARCHAR (5),
PRIMARY KEY (PersNR));

INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (6811034679,'Bengt','Carlberg',10);

INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (7606091347,'Josefin','Backman',4);

INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (8508284163,'Johanna','Backman',1);

CREATE TABLE tblBana
(BanNR VARCHAR (15) NOT NULL,
PRIMARY KEY (BanNR));

INSERT INTO tblBana (BanNR)
Values (1);

INSERT INTO tblBana (BanNR)
Values (2);

INSERT INTO tblBana (BanNR)
Values (3);

ALTER TABLE tblDomare
ADD FOREIGN KEY (PersNR)
REFERENCES tblBana(BanNR);

当前回答

仅供参考,如果你做了所有的数据参考检查,没有发现坏数据……显然,在两个表和字段之间创建外键约束是不可能的,因为这些字段是两个表中的主键!别问我怎么知道的。

其他回答

这是因为您试图从tblDomare创建一个外键。PersNR to tblBana。BanNR但是/和tblDomare中的值。PersNR与tblbanana . bannr中的值不匹配。不能创建违反引用完整性的关系。

尝试删除tblDomare中的当前数据。PersNR。因为tblDomare中的值。PersNR与tblbanana . bannr中的值不匹配。

在我们这边,情况是这样的:

我们在数据库中有一个包含记录的现有表。 然后我引入一个非空的外键 执行更新后,我得到这个错误。

我怎么解决你的问题?

解决方案:我只是删除了表的所有记录,然后尝试更新数据库,它是成功的。

我也有同样的问题。 我的问题是在列(迁移文件)中有nullable: true:

AddColumn("dbo.table", "column", c => c.Int(nullable: true));
        

可能的解决方式:

将可空的“false”更改为“true”。(不推荐) 改变属性类型从int到int?(推荐)

如果需要,稍后在添加列>后更改,然后在以前的记录中删除字段数据

如果你已经将一个现有属性从nullable更改为nonnullable: 3)在数据库记录中填写列数据

从表中删除所有现有数据,然后在表之间建立关系。