SQL – Rehacer indices de todas las tablas

Hace poco me encontré una base de datos Sql Server con comportamientos extraños. Las sentencias SELECT no encontraban los registros recien insertados, aparecían claves primarias duplicadas,… cosas rarísimas que no había visto nunca. El problema surgió tras restaurar un servidor que fue reiniciado a mano por el cliente «…porque tardaba mucho y entonces lo desenchuféy no sé porqué ya no funciona» (Señor, ¡dame paciencia!).

Tras varias horas investigando, el problema se resolvió reconstruyendo los índices de las tablas afectadas. Como no sabíamos qué tablas estaban mal, era necesario recorrerlas todas, así que encontré éste script para evitar tener que ir una a una.

DECLARE @TableName varchar(200)
DECLARE TableCursor CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_TYPE = 'BASE TABLE'
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Reindexando ' + @TableName
DBCC DBREINDEX (@TableName)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor