为什么向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);

当前回答

我想,外键表中的列值应该与主键表中的列值相匹配。如果我们试图在两个表之间创建一个外键约束,其中一列内的值(将是外键)与主键表的列值不同,那么它将抛出消息。

因此,总是建议只在主键表列中存在的外键列中插入那些值。

例如,如果主表列有值1,2,3,而外键列中插入的值不同,那么查询将不会执行,因为它期望值在1和3之间。

其他回答

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

我也犯了这个错误 正如Smutje所提到的,确保你的基本外键表的外键列中没有一个值不在你的参考表中,即(你的基本外键表中的每个值(外键列的值)也必须在你的参考表列中) 最好先清空基本外键表,然后再设置外键

可以使用ALTER TABLE tablename WITH NOCHECK…创建外键。,这将允许违反外键的数据。

“ALTER TABLE tablename WITH NOCHECK…”选项来添加FK—这个解决方案对我有用。

在我的场景中,使用EF,在尝试在现有数据上创建这个新的外键时,我错误地尝试在创建外键后填充数据(使链接)。

修复方法是在创建外键之前填充数据,因为外键会检查所有数据,看看链接是否确实有效。所以如果你还没有填充它,它是不可能工作的。

这发生在我身上,因为我正在设计我的数据库,我注意到我在我的主表上改变了我的种子,现在关系表在主表上没有外键。

所以我需要截断这两个表,现在它工作了!