如何解决一对外键引用带有一对主键的表
我有两张桌子
CREATE TABLE [dbo].[Customer]
(
[SourceID] [int] NOT NULL,[ID_N] [bigint] NOT NULL,[RegionCode] [varchar](1) NOT NULL,[NSID] [int] NOT NULL,CONSTRAINT [Pk_Customer] PRIMARY KEY CLUSTERED
([RegionCode] ASC,[ID_N] ASC)
)
CREATE TABLE [dbo].[Order]
(
[Reference][nvarchar](50) NOT NULL,[SourceID] [int] NOT NULL,[ID_N] [nvarchar](50) NULL,[RegionCode] [varchar](1) NULL,[Customer_ID_N] [bigint] NULL,CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED
([Reference] ASC)
)
我想将 (CustomemrID_N,RegionCode) 作为对 Customer 表的外键引用。
Alter table [dbo].[Order]
ADD CONSTRAINT FK_Order_Customer FOREIGN KEY (Customer_ID_N,RegionCode)
REFERENCES[dbo].[Customer](ID_N,RegionCode)
但我收到此错误:
引用表“dbo.Customer”中没有与外键“FK_Order_Customer”中的引用列列表匹配的主键或候选键。
解决方法
您的尝试有很多问题...大多数是排版问题。
首先声明:
CREATE TABLE [dbo].[Customer](
[SourceID] [int] NOT NULL,[ID_N] [bigint] NOT NULL,[RegionCode] [varchar](1) NOT NULL,[NSID] [int] NOT NULL,CONSTRAINT [Pk_Customer] PRIMARY KEY CLUSTERED
([RegionCode] ASC,[ID_N] ASC)
语句末尾缺少右括号 ()
)。
然后是下一个语句:
CREATE TABLE [dbo].[Order](
[Reference][nvarchar](50) NOT NULL,[SourceID] [int] NOT NULL,[ID_N] [nvarchar](50) NULL,[RegionCode] [varchar](1) NULL,[Customer_ID_N] [bigint] NULL,CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED
([Reference] ASC)
这也是无效的,还缺少右括号。
你的最后一句话也是无效的:
Alter table [dbo].[Order]
ADD CONSTRAINT FK_Order_CustomerFOREIGN KEY ([Customer_ID_N],RegionCode)
REFERENCES[dbo].[Customer](ID_N,RegionCode)
CONSTRAINT FK_Order_CustomerFOREIGN KEY
应该是 CONSTRAINT FK_Order_Customer FOREIGN KEY
;注意 FK_Order_Customer
和 `FOREIGN 之间的空格。
一旦我们解决了这个问题,我们就会得到这样的结果:
CREATE TABLE [dbo].[Customer](
[SourceID] [int] NOT NULL,[ID_N] ASC))
GO
CREATE TABLE [dbo].[Order](
[Reference][nvarchar](50) NOT NULL,CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED
([Reference] ASC))
GO
Alter table [dbo].[Order]
ADD CONSTRAINT FK_Order_Customer FOREIGN KEY ([Customer_ID_N],RegionCode)
注意,当你运行它时,你会得到上面的错误。这是因为您的 PK 被定义为 [RegionCode] ASC,[ID_N] ASC
not ID_N,RegionCode
。所以让我们解决这个问题,因为交换外键......
Alter table [dbo].[Order]
ADD CONSTRAINT FK_Order_Customer FOREIGN KEY (RegionCode,[Customer_ID_N])
REFERENCES[dbo].[Customer](RegionCode,ID_N)
现在它可以工作了。
解决印刷错误,然后阅读错误;它告诉你问题所在。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。