用于创建群集主键的SQL Server语法

时间:2012-06-27 14:03:51

标签: sql-server sql-server-2008-r2

我想将表移动到新文件组。使用the accepted answer as a starting point

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]

给出错误:

  

Msg 1907,Level 16,State 1,Line 1
  无法重新创建索引'PK_AuditLog_AuditLogID'。新索引定义与现有索引强制执行的约束不匹配。

我认为这是因为PK_AuditLog_AuditLogID

  • 聚集索引
  • 主键

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

2 个答案:

答案 0 :(得分:13)

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'

答案 1 :(得分:0)

尽管不适用于您的特定问题,但另一种可能性是,某人可能试图以不同于最初的顺序将列添加到PK。如果您尝试根据sys.indexessys.index_columns中的信息重新创建索引,请确保您基于sys.index_columns.key_ordinal

的顺序进行构建