Uncategorized

Rebuilding all indexes in database (cursor version)

Script to rebuild all indexes in the database. Indexes are iterated using the cursor and so it can be easily extended with other features.

DECLARE @Database NVARCHAR(128)   
DECLARE @Table NVARCHAR(128)  
DECLARE @Stmt NVARCHAR(MAX)  
 
DECLARE curTable CURSOR FOR 
    SELECT '[' + sch.name + '].[' + t.name + ']' as TableName   
    FROM sys.tables t
		inner join sys.schemas sch on sch.schema_id = t.schema_id
	ORDER BY t.name
   
OPEN curTable   
FETCH NEXT FROM curTable INTO @Table   
WHILE @@FETCH_STATUS = 0 
BEGIN   
        
	PRINT '-->' + @Table
 
	SET @Stmt = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD;'
        
	PRINT @Stmt
	EXECUTE(@Stmt)  
 
	FETCH NEXT FROM curTable INTO @Table   
END   
 
CLOSE curTable  
DEALLOCATE curTable  
GO

Same version as the above on but it also includes the option to set different fillfactor.

DECLARE @Database NVARCHAR(128)   
DECLARE @Table NVARCHAR(128)  
DECLARE @FillFactor INT 
DECLARE @Stmt NVARCHAR(MAX)  
 
SET @FillFactor = 100
 
DECLARE curTable CURSOR FOR 
    SELECT '[' + sch.name + '].[' + t.name + ']' as TableName   
    FROM sys.tables t
		inner join sys.schemas sch on sch.schema_id = t.schema_id
	ORDER BY t.name
   
OPEN curTable   
FETCH NEXT FROM curTable INTO @Table   
WHILE @@FETCH_STATUS = 0 
BEGIN   
        
	PRINT '-->' + @Table
 
	SET @Stmt = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD ' +
				'WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3), @FillFactor) + ')'  
        
	PRINT @Stmt
	EXECUTE(@Stmt)  
 
	FETCH NEXT FROM curTable INTO @Table   
END   
 
CLOSE curTable  
DEALLOCATE curTable  
GO