Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Sveta_dba Member Откуда: Киев Сообщений: 18 |
привет не могу разобраться в чем проблема скрипт SET NOCOUNT ON; DECLARE @objectid int; DECLARE @indexid int; DECLARE @partitioncount bigint; DECLARE @schemaname nvarchar(130); DECLARE @objectname nvarchar(130); DECLARE @indexname nvarchar(130); DECLARE @partitionnum bigint; DECLARE @partitions bigint; DECLARE @frag float; DECLARE @pagecount int; DECLARE @command nvarchar(4000); DECLARE @page_count_minimum smallint SET @page_count_minimum = 1 DECLARE @fragmentation_minimum float SET @fragmentation_minimum = 30.0 SELECT s.object_id AS objectid, s.index_id AS indexid, s.partition_number AS partitionnum, s.avg_fragmentation_in_percent AS frag INTO #work_to_do FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, 'LIMITED') s INNER JOIN ( SELECT object_id, index_id FROM sys.partitions GROUP BY object_id, index_id HAVING COUNT(*) > 1 ) t ON t.object_id = s.object_id AND t.index_id = s.index_id WHERE s.avg_fragmentation_in_percent > 10.0 AND s.index_id > 0; ---select * from #work_to_do DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do; OPEN partitions; WHILE (1=1) BEGIN; FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @pagecount, @frag ; -- --, IF @@FETCH_STATUS < 0 BREAK; SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name) FROM sys.objects AS o JOIN sys.schemas as s ON s.schema_id = o.schema_id WHERE o.object_id = @objectid; SELECT @indexname = QUOTENAME(name) FROM sys.indexes WHERE object_id = @objectid AND index_id = @indexid; SELECT @partitioncount = count (*) FROM sys.partitions WHERE object_id = @objectid AND index_id = @indexid; SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD'; IF @partitioncount > 1 SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10)); EXEC (@command); PRINT N'Rebuilding index ' + @indexname + ' on table ' + @objectname; PRINT N' Fragmentation: ' + CAST(@frag AS varchar(15)); PRINT N' Page Count: ' + CAST(@pagecount AS varchar(15)); PRINT N' '; END; -- Close and deallocate the cursor. CLOSE partitions; DEALLOCATE partitions; -- Drop the temporary table. DROP TABLE #work_to_do; ошибка Msg 16924, Level 16, State 1, Line 52 Cursorfetch: The number of variables declared in the INTO list must match that of selected columns. Подскажите что можно сделать как обойти эту ошибку или решить . |
29 окт 13, 17:02 [15047936] Ответить | Цитировать Сообщить модератору |
Сергей Викт. Member Откуда: Москва Сообщений: 888 |
У вас в курсоре SELECT * - 4 поля После открытия вы передаёте значения 4х полей в 5 переменных |
29 окт 13, 17:05 [15047959] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
... FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum /*, @pagecount*/, @frag ; ... |
29 окт 13, 17:05 [15047968] Ответить | Цитировать Сообщить модератору |
Сергей Викт. Member Откуда: Москва Сообщений: 888 |
FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @pagecount, @frag- вот здесь должно быть 4 переменных |
29 окт 13, 17:06 [15047969] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
Если кликнуть два раза по этой ошибке, то в редакторе курсор будет спозиционирован на строчку с ошибкой, раз уж просто ее номера недостаточно. |
||
29 окт 13, 17:12 [15048013] Ответить | Цитировать Сообщить модератору |
Sveta_dba Member Откуда: Киев Сообщений: 18 |
Сергей Викт., да я поняла спасибо BEGIN; FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @frag ; --@pagecount, но почему Rebuilding index не проходит ? |
29 окт 13, 17:16 [15048033] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |