Monday 13 June 2011

Rebuild indexes for all user databases in single shot

DECLARE @Database VARCHAR(255)  
DECLARE @Table VARCHAR(255) 
DECLARE @cmd NVARCHAR(500) 
DECLARE @fillfactor INT
SET @fillfactor = 90
DECLARE DatabaseCursor CURSOR FOR 
SELECT name FROM master.dbo.sysdatabases  
WHERE name NOT IN ('master','model','msdb','tempdb')  
ORDER BY 1 
OPEN DatabaseCursor 
FETCH NEXT FROM DatabaseCursor INTO @Database 
WHILE @@FETCH_STATUS = 0 
BEGIN 
   SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT table_catalog + ''.'' + table_schema + ''.'' + table_name as tableName  
                    FROM ' + @Database + '.INFORMATION_SCHEMA.TABLES WHERE table_type = ''BASE TABLE'''  
   -- create table cursor 
   EXEC (@cmd) 
--Print @Database

   OPEN TableCursor  
   FETCH NEXT FROM TableCursor INTO @Table  
   WHILE @@FETCH_STATUS = 0  
   BEGIN  
       -- SQL 2000 command 
       --DBCC DBREINDEX(@Table,' ',@fillfactor)  
        
       -- SQL 2005 command 
       SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD'
       EXEC (@cmd)
--Print (@Database)
--Print (@cmd)
--Print @Table
       FETCH NEXT FROM TableCursor INTO @Table  
   END  
--Print (@Database)
--Print (@cmd)
   CLOSE TableCursor  
   DEALLOCATE TableCursor

   FETCH NEXT FROM DatabaseCursor INTO @Database 
END 
CLOSE DatabaseCursor  
DEALLOCATE DatabaseCursor 

No comments:

Post a Comment