Tuesday, January 12, 2010

Reindex script for SQL Server

DECLARE @db_name nvarchar(1000)
SET @db_name=N'your database name'
EXEC ('USE ' + @db_name)
DECLARE @index_name nvarchar(1000)
DECLARE @table_name nvarchar(1000)
DECLARE @ind_id int
DECLARE index_cursor CURSOR for
select name, object_name(id), indid from sysindexes where id > 1000 and indid >=1 and rows > 0 order by object_name(id), indid, name
OPEN index_cursor
FETCH NEXT FROM index_cursor INTO @index_name, @table_name, @ind_id
WHILE @@FETCH_STATUS = 0
BEGIN
IF @ind_id = 1
BEGIN
EXEC sp_executesql N'DBCC DBREINDEX (@tbl, @idx, 0)',
N'@idx nvarchar(1000), @tbl nvarchar(1000)',
@index_name,
@table_name
END
EXEC sp_executesql N'DBCC INDEXDEFRAG (@db, @tbl, @idx)',
N'@db nvarchar(1000), @idx nvarchar(1000), @tbl nvarchar(1000)',
@db_name,
@index_name,
@table_name
FETCH NEXT FROM index_cursor INTO @index_name, @table_name, @ind_id
END
CLOSE index_cursor
DEALLOCATE index_cursor