【问题标题】:I can't put a foreign key on a column [duplicate]我不能在列上放置外键[重复]
【发布时间】:2021-02-03 21:43:37
【问题描述】:

我创建了这些表:

create table Angajati 
(
    ID_Angajat int identity(1,1) primary key not null,
    Nume varchar(15) not null,
    Prenume varchar(30) not null,
    FunctieAngajat varchar(100) not null,
    NrTelefon int not null
);

create table PersonalLocatii
(
    ID_PersonalLocatii int identity(1,1) primary key not null,
    CodLocatie int not null,
    foreign key (CodLocatie) references Locatii(CodLocatie),
    AdresaLocatie nvarchar(max) not null,
    FunctieAngajat varchar(100) not null,
    ID_Angajat int not null
);
go

我想在PersonalLocatii 表中的ID_Angajat 列上放置一个外键,我使用以下语法:

alter table PersonalLocatii
    add constraint FK_ID_Angajat
        foreign key (ID_Angajat) references Angajati(ID_Angajat);

修改列后,不让我输入第二个表的信息。第一个表和第二个表之间的关系是一对多的。

这是错误:

ALTER TABLE 语句与 FOREIGN KEY 约束“FK_ID_Angajat”冲突。冲突发生在数据库“Vegas”、表“dbo.Angajati”、列“ID_Angajat”中。

请帮帮我!

【问题讨论】:

  • 这意味着您的ID_Angajat 列中已经有与Angajati 表中的记录不匹配的值。您必须先更正数据。
  • 听起来该表包含一些违反您尝试添加的约束的数据,即ID_Angajat 中的值存在于第二个表中,但不是第一个。

标签: sql-server database tsql


【解决方案1】:

您需要更正您的数据。

此查询将帮助您找到“违规”行。

Select ID_Angajat as Errant__ID_Angajat , * from 
PersonalLocatii child
where not exists (select ID_Angajat from Angajati innerParent where innerParent.ID_Angajat = child.ID_Angajat)

或不同的列表

Select Distinct Errant__ID_Angajat
from
(    Select ID_Angajat as Errant__ID_Angajat from 
    PersonalLocatii child
    where not exists (select ID_Angajat from Angajati innerParent where innerParent.ID_Angajat = child.ID_Angajat)
) derived1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 2015-03-12
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    相关资源
    最近更新 更多