我在向
Table1
添加分区时遇到问题。
以前,该表的主键仅包含 Id 列,但是当我添加分区时,我必须在组合键中包含
AddTimestamp
。现在我想更改结构,使主键再次仅由 Id
组成,但这会导致在尝试在 Table2
中创建外键时出错。
问题描述:
CREATE PARTITION FUNCTION PF_AddTimestamp (DATETIMEOFFSET(7))
AS RANGE LEFT FOR VALUES (
'2020-01-01T00:00:00Z',
'2021-01-01T00:00:00Z',
'2022-01-01T00:00:00Z',
'2023-01-01T00:00:00Z',
'2024-01-01T00:00:00Z'
);
CREATE PARTITION SCHEME PS_AddTimestamp
AS PARTITION PF_AddTimestamp
TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY]);
Table1
:我创建了带有分区和复合主键的表:CREATE TABLE Table1
(
Id INT NOT NULL,
AddTimestamp DATETIMEOFFSET(7) NOT NULL DEFAULT SYSDATETIMEOFFSET(),
SomeField1 VARCHAR(100),
SomeField2 INT,
CONSTRAINT PK_Table1 PRIMARY KEY (Id, AddTimestamp)
)
ON PS_AddTimestamp (AddTimestamp);
但是,当我尝试将主键更改为仅包含 Id 时,遇到以下错误:
关联的分区函数“PF_AddTimestamp”生成的分区多于方案“PS_AddTimestamp”中提到的文件组
Table2
:我创建了 Table2
,并使用外键引用 Id
中的 Table1
:CREATE TABLE Table2
(
Id INT PRIMARY KEY IDENTITY(1,1),
Table1Id INT,
SomeField3 VARCHAR(100),
SomeField4 DECIMAL(10, 2),
CONSTRAINT FK_Table2_Table1
FOREIGN KEY (Table1Id) REFERENCES Table1(Id)
);
但是在创建外键时,出现以下错误:
引用的表“Table1”中没有与外键“FK_Table2_Table1”中的引用列列表匹配的主键或候选键。
我希望
Table1
中的主键仅由 Id
组成,这样我就可以在 Table2
中成功创建引用 Table1 (Id)
的外键。
如何解决这个问题?
我将不胜感激有关此问题的任何建议或建议!
如何解决这个问题?
一旦将 ID 设置为 PK,添加外键就不会遇到任何问题。 您将必须更改分区。 如果需要,您仍然可以按 ID 分区。