SQL Srver外键错误

时间:2016-10-02 03:01:09

标签: sql sql-server database foreign-keys

我有这个分配用于开始sql server以向这些表添加外键。最后一个ALTER TABLE命令总是抛出错误

  

参考表中没有主键或候选键' TCases'与引用列列表匹配...

我真的无法弄清楚它为什么会出现这个错误。任何见解都表示赞赏。

CREATE TABLE TCourtRooms
(        intCourtRoomID             INTEGER         NOT NULL
        ,strCourtRoomNumber         VARCHAR(50)     NOT NULL
        ,strJudgeLastName           VARCHAR(50)     NOT NULL
        ,strJudgeFirstName          VARCHAR(50)     NOT NULL
        ,CONSTRAINT TCourtDockets_PK PRIMARY KEY (intCourtRoomID)
)

CREATE TABLE TCases
(        intCourtRoomID             INTEGER         NOT NULL
        ,intCaseIndex               INTEGER         NOT NULL    
        ,strCaseNumber              VARCHAR(50)     NOT NULL
        ,strDescription             VARCHAR(50)     NOT NULL
        ,CONSTRAINT TCases_PK PRIMARY KEY (intCourtRoomID, intCaseIndex)
)

CREATE TABLE TPersons
(        intCourtRoomID             INTEGER         NOT NULL
        ,intCaseIndex               INTEGER         NOT NULL
        ,intPersonIndex             INTEGER         NOT NULL
        ,strLastName                VARCHAR(50)     NOT NULL
        ,strFirstName               VARCHAR(50)     NOT NULL
        ,strPersonRole              VARCHAR(50)     NOT NULL        --Options are plaintiff or defendant
        ,CONSTRAINT TPlaintiffs_PK PRIMARY KEY (intCourtRoomID, intCaseIndex, intPersonIndex)
  )


CREATE TABLE TLawyers
(        intLawyerID                INTEGER         NOT NULL
        ,intCaseIndex               INTEGER         NOT NULL
        ,intPersonIndex             INTEGER         NOT NULL
        ,strLastName                VARCHAR(50)     NOT NULL
        ,strFirstName               VARCHAR(50)     NOT NULL
        ,strLawyerRole              VARCHAR(50)     NOT NULL  --plaintiff or defendant
        ,CONSTRAINT TLawyers_PK PRIMARY KEY (intLawyerID, intCaseIndex, intPersonIndex)
        ,CONSTRAINT TLawyers_intLawyerID_strLawyerRole_UN   UNIQUE (intLawyerID, strLawyerRole)
)

问题3.2识别并创建外键

-- Child                    Parent          Column(s)
-- -----                    ------          ---------
-- TCases                   TCourtRooms     intCourtRoomID
-- TPersons                 TCases          intCourtRoomID, intCaseIndex
-- TLawyers                 TCourtRooms



ALTER TABLE TCases
    ADD CONSTRAINT TCases_TCourtRooms_FK
    FOREIGN KEY (intCourtRoomID) REFERENCES TCourtRooms (intCourtRoomID)

ALTER TABLE TPersons
    ADD CONSTRAINT TPersons_TCases_FK
    FOREIGN KEY (intCourtRoomID, intCaseIndex) REFERENCES TCases (intCourtRoomID, intCaseIndex)

ALTER TABLE TLawyers
    ADD CONSTRAINT TLawyers_TCases_FK
    FOREIGN KEY (intCaseIndex) REFERENCES TCases (intCaseIndex)</code>

1 个答案:

答案 0 :(得分:2)

这是TCases的主键:

   CONSTRAINT TCases_PK PRIMARY KEY (intCourtRoomID, intCaseIndex)

它是复合主键,包含两部分。您需要在声明中包含两个键:

ALTER TABLE TLawyers
    ADD CONSTRAINT TLawyers_TCases_FK
    FOREIGN KEY (intCaseIndex) REFERENCES TCases (intCourtRoomId, intCaseIndex)

但是,唉,你不能,因为字段TLawyers.intCourtRoomId不存在。我不确定你应该做什么:

  • 将字段添加到TLawyers
  • 修复主键定义以仅引用一列。
  • 做点别的事。

但这是你的问题。