简体   繁体   English

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

[英]There are no Primary or Candidate Keys in the referenced table

Error: There are no Primary or Candidate Keys in the referenced table 'dbo.Customers' that match the referencing column list in the foreign key 'FK_Reservation_Customers_FrstNme FOREIGN KEY' 错误:被引用表'dbo.Customers'中没有与外键'FK_Reservation_Customers_FrstNme FOREIGN KEY'中的引用列列表匹配的主键或候选键

DROP TABLE dbo.Customers;
DROP TABLE dbo.Staff;
DROP TABLE dbo.Rooms;
DROP TABLE dbo.Reservation;
GO
CREATE TABLE "Customers"(

    CustomerID int IDENTITY (1,1) NOT NULL,
    FirstName nvarchar(20) NULL,
    LastName nvarchar(20) NULL,
    StreetNo int NULL,
    City nvarchar(20) NULL,
    PostCode nvarchar(20) NULL,
    Email nvarchar(50) NULL,

    CONSTRAINT PK_Customers PRIMARY KEY
    (
        CustomerID
    )
)
CREATE TABLE "Staff"(

    StaffID nvarchar(20) NOT NULL,
    Pass nvarchar(20) NOT NULL,

    CONSTRAINT PK_Staff PRIMARY KEY
    (
        StaffID
    )
)
CREATE TABLE "Rooms"(

    RoomNo int NOT NULL,
    RoomType nvarchar(20) NULL,
    PricePerNight money NULL,
    MaximumOccupancy int NULL,
    No0fBeds int NULL,
    NoOfBathrooms int NULL,
    Entertainment bit NULL,
    RoomService bit NULL,
    Gym bit NULL,

    CONSTRAINT PK_Rooms PRIMARY KEY
    (
        RoomNo
    )
)
CREATE TABLE "Reservation"(

    ReservationID int IDENTITY (1,1) NOT NULL,
    CustomerID int NOT NULL,
    FirstName nvarchar(20) NULL,
    LastName nvarchar(20) NULL,
    RoomType nvarchar(20) NULL,
    RoomNo int NOT NULL,
    CheckInDate date NULL,
    CheckOutDate date NULL,

    CONSTRAINT PK_Reservation PRIMARY KEY
    (
        ReservationID
    ),
    CONSTRAINT FK_Reservation_Customers_CustID FOREIGN KEY
    (
        CustomerID
    )   
        REFERENCES dbo.Customers
        (
            CustomerID
        ),
    CONSTRAINT FK_Reservation_Customers_FrstNme FOREIGN KEY
    (
        FirstName
    )
        REFERENCES dbo.Customers
        (
            FirstName
        )
    )

Could someone please tell me whats happening here and how i can fix it. 有人可以告诉我这里发生了什么以及如何解决。 Same problem occurs with all the other keys i want to make a foreign key. 我要作外键的所有其他键也发生相同的问题。 Except if i want to reference a primary key. 除了我是否要引用主键。

If you want to create a foreign key, it must reference either the primary key, or a field with a unique constraint. 如果要创建外键,则它必须引用主键或具有唯一约束的字段。

If you want to display the customer's name, make the foreign key reference the CustomerID, and display the results with a join. 如果要显示客户的名称,请使外键引用CustomerID,并显示带有联接的结果。

I ran into this error when specifying key columns in the referenced table that were out of the same order that the primary key or candidate key was defined with on the reference table. 在引用表中指定键列的顺序与在引用表上定义主键或候选键的顺序不一致时,我遇到了此错误。

Switching the order the columns were specified fixed it. 切换指定列的顺序将其固定。

Ex: 例如:

ALTER TABLE [dbo].[MCL_item_vendor_override_mst]  WITH CHECK ADD  
CONSTRAINT [FK_MCL_item_vendor_override_mst_item_mst] FOREIGN KEY([item],[site_ref])
    REFERENCES [dbo].[item_mst] ([item],[site_ref])

failed while 失败了

ALTER TABLE [dbo].[MCL_item_vendor_override_mst]  WITH CHECK ADD  
CONSTRAINT [FK_MCL_item_vendor_override_mst_item_mst] FOREIGN KEY([site_ref],[item])
    REFERENCES [dbo].[item_mst] ([site_ref],[item])

worked. 工作了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM