我正在开发一个项目,我需要在已经存在的各种表上创建几十个非聚簇索引,并且我在创建索引语句时使用了这个“WITH”子句:
CREATE NONCLUSTERED INDEX IX_blah_blah_blah
ON prt.BlahBlah ([blahID])
WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = ON,
IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON, ONLINE = ON,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90);
这些工作正常。
但是,在一个案例中,我有一个包含3M记录的表,但没有索引,也没有主键。我需要创建一个主键,所以我想运行这样的东西:
ALTER TABLE prt.AuditLog
ADD CONSTRAINT PK_auditlog PRIMARY KEY NONCLUSTERED ([RecordID])
WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = ON, -- option NOT SUPPORTED for alter table
IGNORE_DUP_KEY = OFF,
DROP_EXISTING = ON, -- option NOT SUPPORTED for alter table
ONLINE = ON, -- option NOT SUPPORTED for alter table
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90);
但ALTER TABLE
不支持“WITH”子句中的三个选项。
我可以在没有DROP_EXISTING
的情况下生活,但我确实需要SORT_IN_TEMPDB
和ONLINE
选项。
我该如何完成这项工作?
我正在使用SQL Server 2014。
答案 0 :(得分:1)
我找到了在这里设置Sort_IN_TempDB = ON
的方法:
ALTER INDEX [IndexName] ON [SchemaName].[TableName]
REBUILD PARTITION = ALL WITH (SORT_IN_TEMPDB = ON)
GO