Sql server 如何从SQL server数据库中删除所有数据库索引

Sql server 如何从SQL server数据库中删除所有数据库索引,sql-server,indexing,Sql Server,Indexing,我将要编写一个脚本来向数据库添加新索引,我希望该脚本能够正常工作,而不考虑数据库当前的索引 因此,脚本中的第一步应该是删除所有当前索引。(我可以同样轻松地运行.net代码,但我认为TSQL对于这种类型的事情不会那么痛苦) (这是用于小型数据库的开发,所以我不介意这不是管理索引的最快方法,这需要在SQLServer2005和SQLServer2008中使用)我在上找到了这一点。它似乎会删除当前数据库中的所有索引: Declare @Index varchar(128) Declare @Table

我将要编写一个脚本来向数据库添加新索引,我希望该脚本能够正常工作,而不考虑数据库当前的索引

因此,脚本中的第一步应该是删除所有当前索引。(我可以同样轻松地运行.net代码,但我认为TSQL对于这种类型的事情不会那么痛苦)

(这是用于小型数据库的开发,所以我不介意这不是管理索引的最快方法,这需要在SQLServer2005和SQLServer2008中使用)

我在上找到了这一点。它似乎会删除当前数据库中的所有索引:

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

另一个工作脚本:

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
http://blogs.msdn.com/b/tihot/archive/2006/01/16/513548.aspx
声明@indexName NVARCHAR(128)
声明@dropIndexSql NVARCHAR(4000)
声明的表索引游标
从系统索引中选择名称
其中id=OBJECT_id(N'tableName'),并且
indid>0且indid<255,且
INDEXPROPERTY(id、名称、“IsStatistics”)=0
按indid DESC订购
开放表索引
从tableIndexes获取下一个到@indexName
而@@fetch\u status=0
开始
设置@dropIndexSql=N'DropIndexTableName.+@indexName
EXEC sp_executesql@dropIndexSql
从tableIndexes获取下一个到@indexName
结束
关闭表索引
取消分配表索引

谢谢,它给了我一个明确的删除索引,索引“Application.PK_dbo.Application”上不允许删除索引。它正用于主键约束强制。(也许我所要求的是不可能的)我认为您必须删除主键约束才能删除PK索引。你可以使用类似于…'ALTER TableName DROP约束pk_Name'。请记住,这将影响引用完整性。