ALTER PROC [dbo].[reBuildIndex]
DECLARE @partitioncount BIGINT;
DECLARE @schemaname sysname;
DECLARE @objectname sysname;
DECLARE @indexname sysname;
DECLARE @partitionnum BIGINT;
DECLARE @partitions BIGINT;
DECLARE @command VARCHAR(8000);
IF EXISTS (SELECT name FROM sys.objects WHERE name = 'work_to_do')
SELECT object_id AS objectid,
partition_number AS partitionnum,
avg_fragmentation_in_percent AS frag
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 10.0
PRINT '共计需要处理的索引数量为:' + CAST(@count AS VARCHAR);
DECLARE partitions CURSOR FOR SELECT * FROM work_to_do;
FETCH NEXT FROM partitions
SELECT @objectname = o.name,
ON s.schema_id = o.schema_id
WHERE o.object_id = @objectid;
WHERE object_id = @objectid
SELECT @partitioncount = COUNT(*)
WHERE object_id = @objectid
PRINT '正在处理索引 ' + @objectname + ' -> ' + @indexname + ' 碎片率 ' + CAST(@frag AS VARCHAR) + '%';
SELECT @command = 'ALTER INDEX ' + @indexname + ' ON ' + @schemaname + '.' + @objectname + ' REORGANIZE';
SELECT @command = @command + ' PARTITION=' + CONVERT(CHAR, @partitionnum);
SELECT @command = 'ALTER INDEX ' + @indexname + ' ON ' + @schemaname + '.' + @objectname + ' REBUILD';
SELECT @command = @command + ' PARTITION=' + CONVERT(CHAR, @partitionnum);
FETCH NEXT FROM partitions
PRINT '处理完毕,共计耗时:' + CAST(DATEDIFF(SECOND, @begin, GETDATE()) AS VARCHAR) + '秒';
IF EXISTS (SELECT name FROM sys.objects WHERE name = 'work_to_do')
