Могу ли я reset положение курсора в начале?

Как и в теме. Могу ли я просто указать позицию курсора reset в начало в Transact-SQL, чтобы он мог снова работать над таблицей? Я хочу reset его в следующем контексте:

DECLARE @userID INT
DECLARE user_cursor CURSOR FOR SELECT userID FROM users

WHILE /* some condition */
BEGIN
...

    FETCH NEXT FROM user_cursor INTO @userID

    IF @@FETCH_STATUS = 0
    BEGIN
        /*... here goes the reset of the cursor ...*/
    END

...
END

Ответ 1

вам нужно объявить свой курсор как прокрутку, например

declare c scroll cursor for (select statement); 

то в любое время для поиска первого используйте только

fetch first from c;

Ответ 3

Данные, полученные курсором, не будут изменены.

STATIC

Определяет курсор, который создает временную копию данных, которые будут использоваться курсором. Все запросы к курсору отвечают из этой временной таблицы в tempdb; поэтому изменения, внесенные в базовые таблицы, не отражаются в данных, возвращаемых выборками, сделанными для этого курсора, и этот курсор не допускает изменений.

Ответ 4

Используйте контуры курсора и его заботу о вас...

cursor c_something IS
   select * from somewhere

BEGIN

    for some_row in c_something LOOP
        -- do stuff with some_row.COLUMN;
    END LOOP; -- this closes the cursor for you when it has gone all the way through

    -- do other stuff

    for some_row in c_something LOOP -- opens the cursor again from the top
        -- do stuff with some_row.COLUMN;
    END LOOP;

END;