Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Cursorfetch: The number of variables declared in the INTO list must match that of selected  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Cursorfetch: The number of variables declared in the INTO list must match that of selected  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
У вас в курсоре SELECT * - 4 поля

После открытия вы передаёте значения 4х полей в 5 переменных
29 окт 13, 17:05    [15047959]     Ответить | Цитировать Сообщить модератору
 Re: Cursorfetch: The number of variables declared in the INTO list must match that of selected  [new]
Konst_One
Member

Откуда:
Сообщений: 11561
...
FETCH NEXT
FROM partitions
INTO @objectid, @indexid, @partitionnum /*, @pagecount*/, @frag ; 
...
29 окт 13, 17:05    [15047968]     Ответить | Цитировать Сообщить модератору
 Re: Cursorfetch: The number of variables declared in the INTO list must match that of selected  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
FETCH NEXT
FROM partitions
INTO @objectid, @indexid, @partitionnum, @pagecount, @frag 
- вот здесь должно быть 4 переменных
29 окт 13, 17:06    [15047969]     Ответить | Цитировать Сообщить модератору
 Re: Cursorfetch: The number of variables declared in the INTO list must match that of selected  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Sveta_dba
ошибка
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:12    [15048013]     Ответить | Цитировать Сообщить модератору
 Re: Cursorfetch: The number of variables declared in the INTO list must match that of selected  [new]
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 Ответить