gpt4 book ai didi

sql - 将主键从非聚集更改为聚集

转载 作者:行者123 更新时间:2023-12-01 19:23:13 26 4
gpt4 key购买 nike

假设我有一个 SQL Server 2005 表 TableX,上面有 2 个索引:

PK_TableX = FieldA 上的主键非聚集<​​br/>IX_TableX_FieldB = FieldB 上的聚集

我想将 PK 切换为 CLUSTERED,将另一个索引切换为 NONCLUSTERED。

我必须假设数据库将在我尝试更改索引轮次时使用 - 因此我想避免的主要问题是,在该过程中的某个时刻,PK 约束将不存在 table 。我希望避免插入重复 key 的任何风险。

即我不能直接删除主键并重新创建它。

此过程需要通过 SQL 脚本完成,而不是通过 SSMS。

我有一种我认为可行的方法(我将其作为潜在答案发布),但想打开它,以防我遗漏某些内容或有其他/更好的方法。另外,它可能在未来对其他人有用

最佳答案

1)首先删除现有的聚集索引(IX_TableX_FieldB):

   DROP INDEX TableX.IX_TableX_FieldB

2) 对主键中引用的唯一字段创建(临时)UNIQUE 约束

    ALTER TABLE TableX
ADD CONSTRAINT UQ_TableX UNIQUE(FieldA)

3)删除主键

    ALTER TABLE TableX
DROP CONSTRAINT PK_TableX

4) 将主键重新创建为聚集键

   ALTER TABLE TableX
ADD CONSTRAINT PK_TableX PRIMARY KEY CLUSTERED(FieldA)

5) 删除临时 UNIQUE 约束

   ALTER TABLE TableX
DROP CONSTRAINT UQ_TableX

6) 将 IX_TableX_FieldB 添加为 NONCLUSTERED

   CREATE NONCLUSTERED INDEX IX_TableX_FieldB ON TableX(FieldB)

关于sql - 将主键从非聚集更改为聚集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com