Index rebuild

DECLARE @Database NVARCHAR(255)   

DECLARE @Table NVARCHAR(255)  

DECLARE @cmd NVARCHAR(1000)  

 

DECLARE DatabaseCursor CURSOR READ_ONLY FOR  

SELECT name FROM master.sys.databases   

WHERE name NOT IN ('master','msdb','tempdb','model','distribution','do2019','POSpromet')  -- databases to exclude

--WHERE name IN ('DB1', 'DB2') -- use this to select specific databases and comment out line above

AND state = 0 -- database is online

AND is_in_standby = 0 -- database is not read only for log shipping

ORDER BY 1  

 

OPEN DatabaseCursor  

 

FETCH NEXT FROM DatabaseCursor INTO @Database  

WHILE @@FETCH_STATUS = 0  

BEGIN  

 

   SET @cmd = 'DECLARE TableCursor CURSOR READ_ONLY 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)  

   OPEN TableCursor   

 

   FETCH NEXT FROM TableCursor INTO @Table   

   WHILE @@FETCH_STATUS = 0   

   BEGIN

      BEGIN TRY   

         SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD' 

         --PRINT @cmd -- uncomment if you want to see commands

         EXEC (@cmd) 

      END TRY

      BEGIN CATCH

         PRINT '---'

         PRINT @cmd

         PRINT ERROR_MESSAGE() 

         PRINT '---'

      END CATCH

 

      FETCH NEXT FROM TableCursor INTO @Table   

   END   

 

   CLOSE TableCursor   

   DEALLOCATE TableCursor  

 

   FETCH NEXT FROM DatabaseCursor INTO @Database  

END  

CLOSE DatabaseCursor   

DEALLOCATE DatabaseCursor