Indexation de base de données
Bonjour,
Je ne comprends pas pourquoi mon code ne marche pas
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| DECLARE @TableName NVARCHAR(128), @IndexName NVARCHAR(128), @SQL NVARCHAR(MAX)
DECLARE IndexCursor CURSOR FOR
SELECT OBJECT_NAME(IPS.object_id) AS TableName, I.name AS IndexName, IPS.index_id, IPS.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') IPS
JOIN sys.indexes I ON IPS.object_id = I.object_id AND IPS.index_id = I.index_id
WHERE I.type_desc <> 'HEAP' AND avg_fragmentation_in_percent > 10
ORDER BY avg_fragmentation_in_percent DESC;
OPEN IndexCursor
FETCH NEXT FROM IndexCursor INTO @TableName, @IndexName, @SQL,
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = CASE
WHEN avg_fragmentation_in_percent > 30 THEN 'ALTER INDEX [' + @IndexName + '] ON [' + @TableName + '] REBUILD;'
ELSE 'ALTER INDEX [' + @IndexName + '] ON [' + @TableName + '] REORGANIZE;'
END
PRINT @SQL
EXEC sp_executesql @SQL
FETCH NEXT FROM IndexCursor INTO @TableName, @IndexName, @SQL
END
CLOSE IndexCursor
DEALLOCATE IndexCursor |
Pouvez-vous m'aider ?