Hola Todos,
Les dejo el siguiente script, es para truncar el los de una base de datos de MS SQL y a su vez la indexa y recupera el espacio disponible disminuyendo de tamaño el MDF de la base de datos.
USE --> Remplace por su base de datos
GO
ALTER DATABASE contoso
SET SINGLE_USER
SELECT file_id, name
FROM sys.database_files
GO
-- truncamos el log a 1 MB.
DBCC SHRINKFILE (2, 1)
-- truncamos el espacio disponible del ldf y mdf
DBCC SHRINKFILE (1, TRUNCATEONLY)
DECLARE @TableName varchar(255)
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
DBCC DBREINDEX(@TableName,' ',90)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
DBCC SHRINKDATABASE (N'contoso');
-- Truncamos una vez mas el log de la Base de Datos
DBCC SHRINKFILE(2,1)
BACKUP LOG contoso WITH TRUNCATE_ONLY
DBCC SHRINKFILE(2,1)
ALTER DATABASE contoso
SET MULTI_USER