Существует еще одно преимущество использования синтаксиса DECLARE @local_variable CURSOR
, который я только что обнаружил.
Преимущество возникает, когда одна хранимая процедура вызывает другую, и в обеих процедурах одновременно открыты курсоры. Если DECLARE cursor_name CURSOR
используется для определения курсоров, и обе процедуры используют одно и то же имя курсора, тогда вы получите
Сообщение 16915: курсор с именем 'имя_курсора' уже существует.
С другой стороны, если DECLARE @local_variable CURSOR
используется для определения курсоров в родительских и дочерних хранимых процедурах, тогда @local_variable
является локальным для каждой процедуры, и конфликт отсутствует Для тех, кто не использовал этот метод раньше, вот пример, использующий @C
в качестве локальной переменной:
DECLARE @C AS CURSOR;
SET @C = CURSOR FOR SELECT ...;
OPEN @C;
FETCH NEXT FROM @C INTO ...;
...