我只发布主要部分。我有两个表,每个表必须将另一个PK作为FK。
CREATE TABLE apartment
(
cod_apartment INT NOT NULL PRIMARY KEY,
cod_offer INT NOT NULL
);
CREATE TABLE offer
(
cod_offer INT NOT NULL PRIMARY KEY,
cod_apartment INT NOT NULL
);
首先我在两个表上插入值并且它正常工作,我甚至可以使用" select * from ..."进行搜索。但后来我尝试添加外键:
这很有用。
ALTER TABLE offer
ADD FOREIGN KEY (cod_apartment ) REFERENCES apartment;
而这不是。
ALTER TABLE apartment
ADD FOREIGN KEY (cod_offer) REFERENCES offer;
这是错误消息:
ALTER TABLE语句与FOREIGN KEY约束冲突" FK__apartment__cod_offer__6383C8BA"。冲突发生在数据库" kleber_apartment",table" dbo.offer",column' cod_offer'。
问题是,每次我尝试执行时,FK名称都会改变。而这个FK实际上并不存在。我已经删除了两个表并尝试再次插入值,但同样的情况也会发生。
可能是什么?
答案 0 :(得分:6)
这意味着当现有数据不遵守该约束时,您尝试添加外键。因此,您的apartment
表中有一条记录cod_offer
列与cod_apartment
表中的任何值都不匹配。
添加外键不仅会限制未来的数据,还需要任何现有数据都必须遵循该规则。
关于6383C8BA
,无论何时添加约束而不给它命名,SQL Server都会为您选择一个。就个人而言,我建议像:
alter table dbo.apartment
add constraint FK_apartment__cod_offer
foreign key (cod_offer) references dbo.offer (cod_offer);
这使您可以按照自己的方式定义名称,并且可以更清楚地了解您实际构建的内容。