一对外键引用带有一对主键的表

问题描述

我有两张桌子

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)

现在它可以工作了。

解决印刷错误,然后阅读错误;它告诉你问题所在。