Rebuild all indexes in a Database

前端 未结 6 2011
误落风尘
误落风尘 2021-01-30 01:41

I have a very large SQL Server 2008 R2 database (1.5TB) and will be copying some data from column to column within the same table. I\'ve been told that the schema has a large nu

6条回答
  •  遥遥无期
    2021-01-30 02:15

    Replace the "YOUR DATABASE NAME" in the query below.

        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 IN ('YOUR DATABASE NAME')  -- databases
        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
    

提交回复
热议问题