Useful script to rebuild table indexes and update stats
You can update the queries based on your requirement.
To update the table stats
--Query to update the table stats SELECT N'UPDATE STATISTICS ' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME + ' ;' FROM INFORMATION_SCHEMA.tables AS t WHERE t.TABLE_TYPE = N'BASE table'; GO
To re-build table indexes:
--To rebuild table index
DECLARE @myDatabaseName NVARCHAR(255) = N'your-database-name';
DECLARE @runningTableName NVARCHAR(255);
DECLARE @cmd NVARCHAR(1000);
DECLARE @name NVARCHAR(100)= 'your-database-name';
-- Populate the database cursor.
DECLARE myDatabaseLevelCursor CURSOR READ_ONLY
FOR SELECT @name;
OPEN myDatabaseLevelCursor;
FETCH NEXT FROM myDatabaseLevelCursor INTO @myDatabaseName;
WHILE @@FETCH_STATUS = 0
BEGIN
-- In this command we're declaring table level cursor
SET @cmd = 'DECLARE myTableCursor CURSOR READ_ONLY FOR SELECT
''['' + table_catalog + ''].['' + table_schema + ''].['' + table_name + '']'' as tableName
FROM [' + @myDatabaseName + '].INFORMATION_SCHEMA.TABLES WHERE
table_type = ''BASE TABLE'' and table_schema not in (''sys'')';
--create table cursor
EXEC (@cmd);
OPEN myTableCursor;
FETCH NEXT FROM myTableCursor INTO @runningTableName;
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
SET @cmd = 'ALTER INDEX ALL ON ' + @runningTableName + ' REBUILD';
PRINT @cmd; -- uncomment if you want to see commands
--TODO: Once you verified the command (printe-one) then execute it.
-- EXEC (@cmd);
END TRY
BEGIN CATCH
PRINT '---';
PRINT @cmd;
PRINT ERROR_MESSAGE();
PRINT '---';
END CATCH;
FETCH NEXT FROM myTableCursor INTO @runningTableName;
END;
CLOSE myTableCursor;
DEALLOCATE myTableCursor;
FETCH NEXT FROM myDatabaseLevelCursor INTO @myDatabaseName;
END;
CLOSE myDatabaseLevelCursor;
DEALLOCATE myDatabaseLevelCursor;
Comments
Post a Comment