gpt4 book ai didi

sql-server - 将外键添加到复合键时出错

转载 作者:行者123 更新时间:2023-12-02 21:35:40 25 4
gpt4 key购买 nike

我在sql server中有两个表:

第一个表 Message_Child 具有复合主键(MessageId、ChildId)

Message_Child (MessageId, ChildId, Date)

第二个表应包含 Message_Child 表的外键,因此我创建了两列:MessageId 和 ChildId。

Request (RequestId, MessageId, ChildId, type)

我创建了如下约束:

Alter table Request
ADD FOREIGN KEY (MessageId, ChildId) REFERENCES Message_Child(MessageId, ChildId);

但我收到以下错误:

引用表“Message_Child”中没有与外键“FK_Request_534D60F1”中引用列列表匹配的主键或候选键。

编辑添加代码:

Message_Child 表:

CREATE TABLE [dbo].[Message_Child](
[ChildId] [int] NOT NULL,
[MessageId] [int] NOT NULL,
[Date] [datetime] NULL,
CONSTRAINT [PK_Message_Child] PRIMARY KEY CLUSTERED
(
[ChildId] ASC,
[MessageId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Message_Child] WITH CHECK ADD CONSTRAINT [FK_Message_Child_Child_ChildId] FOREIGN KEY([ChildId])
REFERENCES [dbo].[Child] ([ChildId])
GO

ALTER TABLE [dbo].[Message_Child] CHECK CONSTRAINT [FK_Message_Child_Child_ChildId]
GO

ALTER TABLE [dbo].[Message_Child] WITH CHECK ADD CONSTRAINT [FK_Message_Child_Message_MessageId] FOREIGN KEY([MessageId])
REFERENCES [dbo].[Message] ([MessageId])
GO

ALTER TABLE [dbo].[Message_Child] CHECK CONSTRAINT [FK_Message_Child_Message_MessageId]
GO

请求队列表:

CREATE TABLE [dbo].[RequestQueue](
[RequestQueueId] [int] IDENTITY(1,1) NOT NULL,
[PIN] [nvarchar](max) NULL,
[MessageId] [int] NULL,
[ChildId] [int] NULL,
CONSTRAINT [PK_RequestQueue] PRIMARY KEY CLUSTERED
(
[RequestQueueId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[RequestQueue] WITH CHECK ADD CONSTRAINT [FK_RequestQueue_MessageChildId] FOREIGN KEY([RequestQueueId])
REFERENCES [dbo].[RequestQueue] ([RequestQueueId])
GO

ALTER TABLE [dbo].[RequestQueue] CHECK CONSTRAINT [FK_RequestQueue_MessageChildId]
GO

然后我添加了这个:

Alter table [DayCareDB].[dbo].[RequestQueue]
ADD FOREIGN KEY (MessageId, ChildId) REFERENCES [DayCareDB].[dbo].[Message_Child](MessageId, ChildId);

最佳答案

这里的关键顺序很重要。您需要使用(ChildID, MessageID) IN THAT ORDER,因为这是主键定义中的键顺序。

Alter table [DayCareDB].[dbo].[RequestQueue]
ADD FOREIGN KEY (ChildId, MessageId)
REFERENCES [DayCareDB].[dbo].[Message_Child](ChildId, MessageId);

关于sql-server - 将外键添加到复合键时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21433649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com