SQL在引用的表中没有主键或候选键

时间:2012-10-26 22:20:39

标签: sql sql-server sql-server-2008

当我编写SQLSever表达式时,这是我的问题:

  

引用表'Room'中没有主键或候选键   与外键'FK_ Booking _RoomNo__4E298478'中的引用列列表匹配。

我的程序的一些快照:

CREATE TABLE Booking(
   HotelNo  NVARCHAR(4)     not null,
   GuestNo      SMALLINT,  
   DateFrom DATETIME    not null,
   DateTo       DATETIME,
   RoomNo       SMALLINT    not null,

   PRIMARY KEY (HotelNo,DateFrom,RoomNo), 
   FOREIGN KEY (HotelNo) REFERENCES Hotel(HotelNo),
   FOREIGN KEY (GuestNo) REFERENCES Guest(GuestNo),
   FOREIGN KEY (RoomNo) REFERENCES Room(RoomNo));  <---trouble on this line

CREATE TABLE Room(
   RoomNo       SMALLINT    not null, 
   HotelNo  NVARCHAR(4)     not null, 
   RoomType     NVARCHAR(25),
   Price        DECIMAL(5,2),

   PRIMARY KEY (RoomNo,HotelNo), 
   CONSTRAINT fk_Room FOREIGN KEY (HotelNo) REFERENCES Hotel(HotelNo));

这是酒店表

CREATE TABLE Hotel(
   HotelNo  NVARCHAR(4)     not null,
   HotelName    NVARCHAR(25),
   City     NVARCHAR(25),

   PRIMARY KEY (HotelNo) );

我试图对这个问题进行一些搜索,并且它说这可能是在表Room中没有定义主键时引起的,但是如上所述,它已被定义。

有人可以帮我解决这个问题吗?

提前谢谢。

1 个答案:

答案 0 :(得分:3)

对复合键的任何引用也必须包含两列。

FOREIGN KEY (RoomNo, HotelNo) REFERENCES Room(RoomNo, HotelNo))