6

我想将表移动到新文件组。使用接受的答案作为起点

CREATE CLUSTERED INDEX CIX_YourTable
   ON dbo.YourTable(YourClusteringKeyFields)
   WITH DROP_EXISTING
   ON [filegroup_name]

我调整它以适应我的使用:

CREATE CLUSTERED INDEX PK_AuditLog_AuditLogID
   ON dbo.AuditLog(AuditLogID)
   WITH DROP_EXISTING
   ON [TheOtherFileGroup]

给出错误:

消息 1907,级别 16,状态 1,第 1 行
无法重新创建索引 'PK_AuditLog_AuditLogID'。新索引定义与现有索引强制执行的约束不匹配。

这是,我假设,因为PK_AuditLog_AuditLogID

  • 聚集索引
  • 一个主键

所以我需要语法来创建主键聚集索引WITH DROP_EXISTING

4

2 回答 2

17
CREATE UNIQUE CLUSTERED INDEX PK_AuditLog_AuditLogID
   ON dbo.AuditLog(AuditLogID)
   WITH DROP_EXISTING
   ON [TheOtherFileGroup]

保留了逻辑主键约束尽管在 2012 年进行了测试)

CREATE TABLE dbo.AuditLog
(
AuditLogID int constraint PK_AuditLog_AuditLogID primary key
)


CREATE UNIQUE CLUSTERED INDEX PK_AuditLog_AuditLogID
   ON dbo.AuditLog(AuditLogID)
   WITH DROP_EXISTING
   ON [Primary]



SELECT CONSTRAINT_TYPE  /*Returns PRIMARY KEY*/
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'PK_AuditLog_AuditLogID'
于 2012-06-27T14:08:25.070 回答
0

尽管不适用于您的特定问题,但另一种可能性是某人可能正试图以不同于最初的顺序向 PK 添加列。sys.indexes如果您尝试从and中的 info 重新创建索引sys.index_columns,请确保您是根据以下顺序构建的sys.index_columns.key_ordinal

于 2019-07-05T20:29:11.207 回答