Deframmentare gli indici in MSSQL 2005

Questa semplice procedura permette di ricreare gli indici in un db MSSQL 2005 senza interrompere l’operatività del data base.

create procedure [dbo].[usp_RebuildAllIndexesOFF] (@fillfactor smallint = 100,@filter char(50)=”)
as
begin
set nocount on
DECLARE @cmd varchar(200)
SET @cmd = ‘print ”?” ‘
SET @cmd = @cmd + ‘ALTER INDEX ALL ON ? ‘
SET @cmd = @cmd + ‘REBUILD WITH (FILLFACTOR = ‘
SET @cmd = @cmd + convert (varchar(5), @fillfactor )
SET @cmd = @cmd + ‘ , ONLINE = on) ‘
declare @wh varchar(200)
set @wh=”
if (len(@filter)>0)
begin
SET @wh = ‘and o.name like ”%’ + rtrim(@filter) + ‘%”’
end
PRINT @cmd
EXEC sp_MSforeachtable @command1=@cmd,@whereand=@wh
set nocount off
end

Lasciando i parametri di default vengono reindicizzate tutte le tabelle con un fattore di riempimento di 100. Volendo restringere solo su particolari tabelle basta impostare il parametro @filter.