SQL Server:在多个列上添加外键

时间:2016-12-23 17:40:42

标签: sql sql-server database sql-server-2016

我试图在一个表的两列上创建一个外键,指向另一个表的同一列,但我似乎遇到了错误。

我正在使用SQL Server和Microsoft SQL Server Management Studio。

这就是我的所作所为:

CREATE TABLE House 
(
    hid         INTEGER         PRIMARY KEY,
    hname       VARCHAR(32)     NOT NULL,
    address     VARCHAR(128)    NOT NULL,
);

CREATE TABLE Room 
(
    sid         INTEGER,
    hid         INTEGER         FOREIGN KEY REFERENCES House(hid),
    rname       VARCHAR(32)     NOT NULL,

    CONSTRAINT sid_pk PRIMARY KEY(sid, hid)
);

CREATE TABLE Seat 
(
    hid         INTEGER,
    sid         INTEGER,
    plid        INTEGER,
    row         INTEGER         NOT NULL,
    seat        INTEGER         NOT NULL,

    CONSTRAINT sid_fk 
        FOREIGN KEY (hid, sid) REFERENCES Room(hid, sid), <-- Here's the error
    CONSTRAINT plid_pk 
        PRIMARY KEY (hid, sid, plid),

    UNIQUE(hid, sid, row, seat)
);

我一直在&#34;错误1776&#34;说房间里没有主键......

1 个答案:

答案 0 :(得分:0)

根据来自@ hogan的帖子。作为社区维基发布,这样就不会丢失

Room表中,主键为(sid, hid) ..但在seat表格中,您引用了新的主键Room(hid, sid)

所以改变你的room表约束定义,如下所示

CONSTRAINT sid_fk FOREIGN KEY (hid, sid) REFERENCES Room(sid,hid)