创建FK约束时出错:引用的表'Period'中没有与引用列

时间:2016-10-28 19:53:33

标签: sql-server database tsql

由于原始平台上的位置不同,我的数据库中的大多数表都包含复合主键,但身份只在给定位置唯一。我有一个Period表,其中包含由FiscalYearPeriodID分隔的会计年度的开始日期和结束日期。 PeriodID重复1-12,因此此表的主键是FiscalYearPeriodID

FiscalYear INT NOT NULL,
PeriodID TINYINT NOT NULL,
PeriodStart DATE NOT NULL,
PeriodEnd DATE NOT NULL,
PeriodWeeks TINYINT NOT NULL,
QuarterID TINYINT NOT NULL,
DateManipulate DATE NOT NULL,
CONSTRAINT [PK_Period] PRIMARY KEY (PeriodID, FiscalYear)

我还有一个Clinic.Dates表,它使用相同的FiscalYearPeriodID,但每个位置都有唯一的数据。我将这些分开,因此我没有相同FiscalYearPeriodID的40个实例,日期范围会重复。

ClinicID INT NOT NULL CONSTRAINT [FK_ClinicDates] FOREIGN KEY REFERENCES Clinic.Master(ClinicID),
FiscalYear INT NOT NULL,
PeriodID TINYINT NOT NULL,
PeriodDays INT NOT NULL,
CONSTRAINT [PK_Dates] PRIMARY KEY (ClinicID, PeriodID, FiscalYear)

我遇到的问题是在这些表之间创建外键约束,因为列本身并不是唯一的。

ALTER TABLE Clinic.Dates ADD 
    CONSTRAINT FK_PeriodDates FOREIGN KEY(FiscalYear, PeriodID) REFERENCES Clinic.Period(FiscalYear, PeriodID)
GO

我得到的错误是:

  

引用表'Clinic.Period'中没有主键或候选键与外键'FK_PeriodDates'中的引用列列表匹配。

我的问题:还有另一种解决方法吗?主键存在于Clinic.Period表中,但在尝试进行此FK约束时无法识别。

更新:以下是两个表的几个数据示例,以获得更好的视角。

期间表: enter image description here

Clinic.Dates表: enter image description here

1 个答案:

答案 0 :(得分:1)

你有向后的参考。它应该从Clinic.Periods转到 Clinic.Dates

ALTER TABLE Clinic.Periods ADD 
    CONSTRAINT FK_PeriodDates FOREIGN KEY(FiscalYear, PeriodID) REFERENCES Clinic.Dates(FiscalYear, PeriodID)
GO