Пример использования курсоров
01.01.2007
Вот пример использования курсора для прохода по каждой записи взапросе и операции с этой записью:
Declare @MyVar int Declare c cursor for Select MyField From MyTable Where MyField2=1 /* c - переменная курсора Select ... выражение к каждой записи которого посредством курсора можно достучаться */ Open c --открываем курсор, с этой строкой будет выполнен приведенный выше Select Fetch Next From c Into @MyVar -- вытаскиваем первую запись и присваиваем значение MyField в переменную @MyVar While @@Fetch_Status = 0 -- проверяем не последняя ли это запись, а точнее - смогли ли мы возвратить запись Begin Print @MyVar -- что-то делаем с полученными данными Fetch Next From c Into @MyVar -- вытаскиваем следующую запись и присваиваем значение MyField в переменную @MyVar End Close c -- закрывам курсор, закрываем запрос, ОПЕРАТОР ОБЯЗАТЕЛЕН! Deallocate c -- уничтожаем переменную, ОПЕРАТОР ОБЯЗАТЕЛЕН!
Если курсор не должен "отслеживать" изменения в таблице по ходу своей работы и не должен менять значение таблицы желательно добавление опций предотвращающих блокирование объектов на время работы курсора:
Declare c cursor Local Fofward_Only Static Read_Only for Select MyField From MyTable Where MyField2=1