【问题标题】:SQL Server: Alter a clustered primary index to an non-clusteredSQL Server:将聚集主索引更改为非聚集主索引
【发布时间】:2009-09-07 08:05:02
【问题描述】:

如何将主聚集索引更改为非聚集索引。 (作为“辅助”表,我想将聚集索引用于“标题”表的外键列。)

这对我不起作用(错误似乎是合理的:)

DROP INDEX ClientUsers.PK_ClientUsers
CREATE UNIQUE CLUSTERED INDEX IDX_ClientUsers_Id ON ClientUsers(Id)

Msg 3723, Level 16, State 4, Line 7
An explicit DROP INDEX is not allowed on index 'ClientUsers.PK_ClientUsers'. 
It is being used for PRIMARY KEY constraint enforcement.

【问题讨论】:

  • 您是否尝试过先删除主键约束? ALTER TABLE ClientUsers DROP CONSTRAINT PK_ClientUsers

标签: sql-server tsql indexing


【解决方案1】:

我认为你必须:

  1. 放下 FK
  2. 放下PK
  3. 删除聚集索引
  4. 重新创建 PK
  5. 重新创建 FK
  6. 在 FK 列上重新创建聚集索引

然后可选择在 PK 列上创建二级索引

【讨论】:

    【解决方案2】:

    您是否尝试过同时删除表上的 PRIMARY KEY 约束 - 然后删除索引 - 然后重新添加两者?

    ALTER TABLE table_name DROP primary key
    

    【讨论】:

    • 如果他有FK那不会是个问题
    • 可能,但问题尚不清楚是否在此列上设置了外键 - 我只是在解决眼前的问题。如果我们担心外键,我们需要考虑所有外键。这可能是依赖于该列的许多外键:可能需要大量外键销毁/重新实例化。
    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 2021-09-07
    • 2018-05-08
    • 1970-01-01
    • 2013-08-20
    • 2014-04-27
    • 2013-03-22
    相关资源
    最近更新 更多