DECLARE @sql NVARCHAR(MAX)
SET @sql=''
SELECT @sql=@sql+'ALTER INDEX ['+i.name+'] ON '+t.name+' REBUILD PARTITION = ALL;'
FROM sys.indexes AS i INNER JOIN sys.tables AS t
ON i.[object_id]=t.[object_id]
WHERE i.type_desc='CLUSTERED'
SET @sql=REPLACE(@sql,';','
')
PRINT @sql
EXEC (@sql)
数据库在长时间使用后, 会形成大量碎片, 有时看着有大量可用空间, 却又释放不了, 可以用这个脚本先重建聚集索引, 再收缩就没问题的了。