我想将表移动到新文件组。使用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
答案 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.indexes
和sys.index_columns
中的信息重新创建索引,请确保您基于sys.index_columns.key_ordinal