【发布时间】:2011-07-29 23:15:32
【问题描述】:
对数据库进行大规模重新设计后,我需要从中删除所有索引,并设置新索引。
我找到了很好的脚本来获取所有索引并删除,但我有问题 - 我无法删除由 PRIMARY KEY 约束创建的索引。 (也许还有其他类型的索引我无法删除)。
我的问题是:如何更改下面的代码以删除所有索引,除了为主键创建的索引或其他我无法手动删除的索引。
DECLARE @indexName VARCHAR(128)
DECLARE @tableName VARCHAR(128)
DECLARE [indexes] CURSOR FOR
SELECT [sysindexes].[name] AS [Index], [sysobjects].[name] AS [Table]
FROM [sysindexes]
INNER JOIN [sysobjects] ON [sysindexes].[id] = [sysobjects].[id]
WHERE [sysindexes].[name] IS NOT NULL AND [sysobjects].[type] = 'U'
OPEN [indexes]
FETCH NEXT FROM [indexes] INTO @indexName, @tableName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('DROP INDEX [' + @indexName + '] ON [' + @tableName + ']')
FETCH NEXT FROM [indexes] INTO @indexName, @tableName
END
CLOSE [indexes]
DEALLOCATE [indexes]
【问题讨论】:
标签: sql sql-server-2005 indexing