Ваш курсор должен быть НЕДОСТАТОЧНЫМ или СТАТИЧЕСКИМ
От BOL: http://msdn.microsoft.com/en-us/library/ms180169.aspx
НЕДОСТАТОЧНЫЙ
Определяет курсор, который делает временную копию данных, которые будут использоватьсякурсором.На все запросы к курсору отвечают из этой временной таблицы в tempdb;следовательно, изменения, внесенные в базовые таблицы, не отражаются в данных, возвращаемых выборками, сделанными для этого курсора, и этот курсор не допускает изменений.Когда используется синтаксис ISO, если INSENSITIVE не указан, зафиксированные удаления и обновления, сделанные для базовых таблиц (любым пользователем), отражаются в последующих выборках.
STATIC
Определяет курсор, который делаетвременная копия данных для использования курсором.На все запросы к курсору отвечают из этой временной таблицы в tempdb;поэтому изменения, внесенные в базовые таблицы, не отражаются в данных, возвращаемых выборками, сделанными для этого курсора, и этот курсор не допускает изменений.
Однако я все равно рекомендовал бы использовать решение на основе SET