如何将主键更改为非聚集索引?

43

我是一名兼职的不情愿的数据库管理员。我想将现有的主键索引从聚集索引更改为非聚集索引,但是语法却让我困扰。

这是当前的脚本内容:

ALTER TABLE [dbo].[Config] WITH NOCHECK ADD 
    CONSTRAINT [PK_Config] PRIMARY KEY  CLUSTERED 
    (
        [ConfigID]
    )  ON [PRIMARY] 

我在在线文档中没有看到 ALTER CONSTRAINT 语句。

1个回答

79

删除聚集索引,然后将主键重新创建为非聚集索引:

ALTER TABLE dbo.Config DROP CONSTRAINT PK_Config
go
ALTER TABLE dbo.Config ADD CONSTRAINT PK_Config 
    PRIMARY KEY NONCLUSTERED (ConfigID)

2
我知道这是一篇旧帖子,但有趣的是,如果索引与主键一起使用,并且已经被另一个表引用,您将无法删除它。(至少在MS SQL Server中) - Bruno
@Bruno,在MSSQL中,如果索引与主键一起使用,并且已被另一个表引用,那么将主键更改为非聚集是否有替代方案? - Kavya Shetty
@KavyaShetty 是的,请使用 https://dev59.com/wnRB5IYBdhLWcg3w4a8o 的答案来识别引用fkeys。然后使用此方法禁用它们(但选择性方法而不是答案中的“全部”方法)https://dev59.com/qHVC5IYBdhLWcg3w21Mq。当您重新放置pkey时,请重新启用...那里的一位评论者有用地指出还要检查触发器! - simon coleman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接