簡體   English   中英

創建外鍵來復合主鍵

[英]Creating a foreign key to compound primary key

我有兩個表格- 教育人員學院

CREATE TABLE [dbo].[Educators]
(
    [UserId] [nvarchar](128) NOT NULL,
    [FacultyId] [smallint] NOT NULL,
    [InstitutionUserId] [nvarchar](128) NOT NULL,

    CONSTRAINT [PK_Educators] 
        PRIMARY KEY CLUSTERED ([UserId] ASC)
)

CREATE TABLE [dbo].[Faculties]
(
    [InstitutionUserId] [nvarchar](128) NOT NULL,
    [FacultyId] [smallint] NOT NULL,

    CONSTRAINT [PK_UserFaculties] 
        PRIMARY KEY CLUSTERED ([InstitutionUserId] ASC, [FacultyId] ASC)
)

Faculties具有由兩列( InstitutionUserIdFacultyId )組成的復合主鍵。 我在Educators表中也有相同的列。 我想將這兩個表與一個外鍵鏈接在一起。

因此,這是我的查詢:

ALTER TABLE [dbo].[Educators] WITH CHECK 
    ADD CONSTRAINT [FK_Educators_FacultyId_Faculties_FacultyId] 
    FOREIGN KEY ([FacultyId], [InstitutionUserId])
    REFERENCES [dbo].[Faculties] ([FacultyId], [InstitutionUserId])

但是我收到此錯誤消息:

消息1776,級別16,狀態0,第7行
引用表'dbo.Faculties'中沒有與外鍵'FK_Educators_FacultyId_Faculties_FacultyId'中的引用列列表匹配的主鍵或候選鍵。

消息1750,第16級,狀態1,第7行
無法創建約束或索引。 請參閱先前的錯誤。

如何解決這個問題呢?

您的表及其約束看起來很好。 我唯一看到的問題是主鍵中列的順序

CONSTRAINT [PK_UserFaculties] PRIMARY KEY CLUSTERED 
(
    [InstitutionUserId] ASC,
    [FacultyId] ASC
)

與您在外鍵約束中聲明的順序不同

ALTER TABLE [dbo].[Educators]  WITH CHECK ADD  CONSTRAINT [FK_Educators_FacultyId_Faculties_FacultyId] FOREIGN KEY([FacultyId], [InstitutionUserId])
REFERENCES [dbo].[Faculties] ([FacultyId], [InstitutionUserId])

嘗試像這樣更改外鍵聲明中的列順序:

ALTER TABLE [dbo].[Educators]  WITH CHECK ADD  CONSTRAINT [FK_Educators_FacultyId_Faculties_FacultyId] FOREIGN KEY([InstitutionUserId], [FacultyId])
REFERENCES [dbo].[Faculties] ([InstitutionUserId], [FacultyId])

密鑰應與定義的順序相同:

ALTER TABLE dbo.Educators
    ADD CONSTRAINT FK_Educators_FacultyId_Faculties_FacultyId
        FOREIGN KEY(InstitutionUserId, FacultyId)
            REFERENCES dbo.Faculties(InstitutionUserId, FacultyId);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM