【问题标题】:No primary or candidate key in the referenced table引用表中没有主键或候选键
【发布时间】:2018-08-01 17:18:01
【问题描述】:

我创建了一个表Request,它有一个由三列组成的主键和一个外键

CREATE TABLE Request 
(
    Iqama varchar(255) ,
    Cid int,
    ReqID int,

    FOREIGN KEY (Iqama, Cid) REFERENCES Users(Iqama, ID),

    PRIMARY KEY (Cid, Iqama, ReqID)
);

我还创建了下表,它是表Request 的多值属性,但是我收到了错误

消息 1776,第 16 级,状态 0,第 51 行
引用表“Request”中没有与外键“FK__Request_Services__151B244E”中的引用列列表匹配的主键或候选键。

消息 1750,第 16 级,状态 1,第 51 行
无法创建约束或索引。查看以前的错误。

桌子:

CREATE TABLE Request_Services_chosen
(
    Iqama varchar(255) ,
    Cid int,
    ReqId_ int,
    Servicechosen varchar(255),

    FOREIGN KEY (ReqId_, Iqama, Cid) REFERENCES Request(ReqID, Iqama, Cid),
    PRIMARY KEY (ReqId_, Iqama, Cid, Servicechosen)
);

这是Users 表:

CREATE TABLE Users 
(
    ID int NOT NULL,
    Iqama varchar(255) NOT NULL,
    Name varchar(255),
    Password varchar(255),
    Phone varchar(255),

    PRIMARY KEY (Iqama, ID)
);

【问题讨论】:

  • 我确定这不是 MySQL。但是 - 您应该使用与引用的主键相同的列顺序。

标签: sql sql-server database


【解决方案1】:

request 中的主键定义为(cid, iqama, reqid),但在request_services_chosenREFERENCES 子句中,您使用(reqid, iqama, cid)。这是错误的顺序。

使用相同的顺序。

CREATE TABLE Request_Services_chosen(
    ...
    FOREIGN KEY (Cid,Iqama,ReqId_) REFERENCES Request(Cid,Iqama,ReqID),
    ...
);

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 2018-12-25
    • 2022-01-07
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多