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

当前回答

当你将表列从可空变为不可空时,你必须:

首先,用value(因为它是外来的)初始化这个列 键不可为空)。 之后,就可以正常地修改表列了。

其他回答

我在项目中遇到了一些问题。

在子表中,没有任何Id等于1和11的记录

我插入了DEAL_ITEM_THIRD_PARTY_PO表,它的Id等于1和11,然后我可以创建FK

或者你可以用这个

SELECT  fk_id FROM dbo.tableA
Except
SELECT fk_id From dbo.tableB

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

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

我怎么解决你的问题?

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

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

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

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