RealWorldDevelopers
9/19/2016 - 11:23 PM

ReIndex All Tables in a SQL Database

ReIndex All Tables in a SQL Database



 --FOR SQL Server 2014 AND later version  

 DECLARE   @TableName VARCHAR(255)  
 DECLARE   @   SQL   NVARCHAR(500)  
 DECLARE   @fillfactor   INT  
  SET   @fillfactor   =   80  
 DECLARE   TableCursor   CURSOR    FOR  
  SELECT   OBJECT_SCHEMA_NAME([object_id])   +   '.'   +   NAME    AS   TableName  
 FROM   sys.tables  
 WHERE   is_memory_optimized   =   0  
 OPEN   TableCursor  
 FETCH    NEXT    FROM   TableCursor   INTO   @TableName  
 WHILE @@FETCH_STATUS   =   0  
 BEGIN  
  SET   @   SQL    =    'ALTER INDEX ALL ON '    +   @TableName   +    ' REBUILD WITH (FILLFACTOR = '    +    CONVERT   (VARCHAR(3),@fillfactor)   +    ')'  
 EXEC   (@   SQL   )  
 FETCH    NEXT    FROM   TableCursor   INTO   @TableName  
 END  
  CLOSE   TableCursor  
 DEALLOCATE   TableCursor  
  GO  


 --(Remember that ALTER index will fail ON IN-memory TABLE, hence they needs TO be excluded)  

 --FOR SQL Server 2005, 2008 AND 2012 versions  

 DECLARE   @TableName VARCHAR(255)  
 DECLARE   @   SQL   NVARCHAR(500)  
 DECLARE   @fillfactor   INT  
  SET   @fillfactor   =   80  
 DECLARE   TableCursor   CURSOR    FOR  
  SELECT   OBJECT_SCHEMA_NAME([object_id])   +   '.'   +   NAME    AS   TableName  
 FROM   sys.tables  
 OPEN   TableCursor  
 FETCH    NEXT    FROM   TableCursor   INTO   @TableName  
 WHILE @@FETCH_STATUS   =   0  
 BEGIN  
  SET   @   SQL    =    'ALTER INDEX ALL ON '    +   @TableName   +    ' REBUILD WITH (FILLFACTOR = '    +    CONVERT   (VARCHAR(3),@fillfactor)   +    ')'  
 EXEC   (@   SQL   )  
 FETCH    NEXT    FROM   TableCursor   INTO   @TableName  
 END  
  CLOSE   TableCursor  
 DEALLOCATE   TableCursor  
  GO  

 --FOR SQL Server 2000 version  

 DECLARE   @MyTable VARCHAR(255)  
 DECLARE   myCursor  
 CURSOR    FOR  
  SELECT    TABLE_NAME  
 FROM   information_schema.tables  
 WHERE   table_type   =    'base table'  
 OPEN   myCursor  
 FETCH    NEXT  
 FROM   myCursor   INTO   @MyTable  
 WHILE @@FETCH_STATUS   =   0  
 BEGIN  
 PRINT   'Reindexing Table:  '    +   @MyTable  
 DBCC DBREINDEX(@MyTable,   ''   , 80)  
 FETCH    NEXT  
 FROM   myCursor   INTO   @MyTable  
 END  
  CLOSE   myCursor  
 DEALLOCATE   myCursor  
 EXEC   sp_updatestats  
 GO