Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建外键以合成主键_Sql_Sql Server_Database_Tsql_Azure Sql Server - Fatal编程技术网

Sql 创建外键以合成主键

Sql 创建外键以合成主键,sql,sql-server,database,tsql,azure-sql-server,Sql,Sql Server,Database,Tsql,Azure Sql Server,我有两张桌子——教育者和学院: 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].[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
有一个由两列组成的复合主键(
InstitutionUserId
FacultyId
)。我在
表中也有相同的列。我想用外键将这两个表链接在一起

这是我的问题:

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_FacultyId”中的引用列列表匹配的主键或候选键

Msg 1750,第16级,状态1,第7行
无法创建约束或索引。请参阅前面的错误


如何解决此问题?

键的定义顺序应与键的定义顺序相同:

ALTER TABLE dbo.Educators
    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);

您的表及其约束看起来很好。我能看到的唯一问题是主键中列的顺序

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])

您的表及其约束看起来很好。我能看到的唯一问题是主键中列的顺序

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])