在 SQL Server 2022 中创建添加唯一索引的分区表?

问题描述 投票:0回答:1

我正在创建一个名为 TestArticles 的分区表,根据文件组的发布年份 (publishDate) 指定多个文件组。该代码(不包括注释部分)执行正确。我的任务是向“哈希”字段添加唯一索引。当我尝试在表创建代码中执行此操作时,我收到以下错误:

'列'publishDate'是索引'UQ_Articles_hash的分区列。唯一索引的分区列必须是索引键的子集。'

我可以从(id、publishDate、hash)创建复合主键 - 但这不是我所需要的。

有没有办法将哈希指定为每个创建的文件组的唯一索引,或者在初始化整个表时指定它?

USE Articles;
GO

ALTER DATABASE Articles
ADD FILEGROUP Articles2024;

ALTER DATABASE Articles
ADD FILEGROUP Articles2025;

ALTER DATABASE Articles
ADD FILEGROUP Articles2026;

ALTER DATABASE Articles
ADD FILEGROUP Articles2027;


CREATE PARTITION FUNCTION PF_Articles_PublishDate (DATETIME)
AS RANGE RIGHT FOR VALUES 
(
'2024-01-01', 
'2025-01-01',
'2026-01-01'
);

CREATE PARTITION SCHEME PS_Articles_PublishDate
AS PARTITION PF_Articles_PublishDate
TO 
(
Articles2024,
Articles2025,
Articles2026,
Articles2027
);

CREATE TABLE TestArticles (
    id INT NOT NULL,
    path VARCHAR(200) NULL,
    description VARCHAR(100) NOT NULL,
    publishDate DATETIME NOT NULL,
    hash BIGINT NOT NULL,
    authorId INT NOT NULL,
    CONSTRAINT PK_Articles PRIMARY KEY CLUSTERED (id, publishDate),
    CONSTRAINT FK_Articles_Authors FOREIGN KEY (authorId) REFERENCES dbo.Authors(id)
    --,CONSTRAINT UQ_Articles_hash UNIQUE NONCLUSTERED (hash)
) ON PS_Articles_PublishDate (publishDate);

使用的数据库:

SQL Server 2022 (v16.0.1000.6)

sql sql-server indexing constraints partitioning
1个回答
0
投票

您必须在另一个存储中创建索引。默认情况下,创建索引时,索引所依赖的表使用表存储(PS_Articles_PublishDate)。

使用另一个存储如[PRIMARY]作为示例...

CRAATE UNIQUE INDEX X_SQLpro ON TestArticles (publishDate) ON [PRIMARY];

或者使用约束...具有相同的 ON 子句...

© www.soinside.com 2019 - 2024. All rights reserved.