Как удалить все индексы базы данных из базы данных сервера SQL - PullRequest
2 голосов
/ 01 марта 2010

Я собираюсь написать скрипт для добавления новых индексов в базу данных, я хочу, чтобы этот скрипт работал независимо от текущих индексов, имеющихся в базе данных.

Поэтому первым шагом в скрипте должно быть удаление всех текущих индексов. (Я мог бы так же легко запустить код .net, но я думаю, что TSQL будет менее болезненным для такого рода вещей)

(Это для использования в разработке для небольших баз данных, поэтому я не против, если это не самый быстрый способ управления индексами, это должно работать для SqlServer 2005 и SqlServer 2008)

Ответы [ 2 ]

6 голосов
/ 01 марта 2010

Я нашел это в http://refactormycode.com/codes/522-drop-all-indexes-in-sql-server. Кажется, что отбрасываются все индексы в текущей базе данных:

Declare @Index varchar(128)
Declare @Table varchar(128)

Select
SysIndexes.Name As 'Index',
SysObjects.Name As 'Table'
Into
#Indexes
From
SysIndexes
Inner Join SysObjects On
    SysObjects.id = SysIndexes.id
Where
SysIndexes.Name Is Not Null
and SysObjects.XType = 'U'
Order By
SysIndexes.Name,
SysObjects.Name

While (Select Count(*) From #Indexes) > 0
Begin
    Set @Index = (Select Top 1 [Index] From #Indexes)
    Set @Table = (Select Top 1 [Table] From #Indexes)

    --Print 'Drop Index [' + @Index + '] On [' + @Table + ']' + Char(13)
    Exec ('Drop Index [' + @Index + '] On [' + @Table + ']')
    Delete From #Indexes Where [Index] = @Index and [Table] = @Table
End

Drop Table #Indexes
1 голос
/ 08 июля 2013

Еще один рабочий скрипт:

http://blogs.msdn.com/b/tihot/archive/2006/01/16/513548.aspx


    DECLARE @indexName NVARCHAR(128)
    DECLARE @dropIndexSql NVARCHAR(4000)


    DECLARE tableIndexes CURSOR FOR
    SELECT name FROM sysindexes
    WHERE id = OBJECT_ID(N'tableName') AND 
      indid > 0 AND indid < 255 AND
      INDEXPROPERTY(id, name, 'IsStatistics') = 0
    ORDER BY indid DESC


    OPEN tableIndexes
    FETCH NEXT FROM tableIndexes INTO @indexName
    WHILE @@fetch_status = 0
    BEGIN
      SET @dropIndexSql = N'DROP INDEX tableName.' + @indexName
      EXEC sp_executesql @dropIndexSql

      FETCH NEXT FROM tableIndexes INTO @indexName
    END


    CLOSE tableIndexes
    DEALLOCATE tableIndexes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...