Jest jeszcze jedna zaleta używania DECLARE @local_variable CURSOR
składnia, którą właśnie odkryłem.
Zaleta występuje, gdy jedna procedura składowana wywołuje inną, a obie procedury mają otwarte jednocześnie kursory. Jeśli DECLARE cursor_name CURSOR
służy do definiowania kursorów, a obie procedury używają tej samej nazwy_kursora, więc otrzymujesz
Z drugiej strony, jeśli DECLARE @local_variable CURSOR
służy do definiowania kursorów w nadrzędnych i podrzędnych procedurach składowanych, a następnie @local_variable
jest lokalny dla każdej procedury i nie ma konfliktu. Dla tych, którzy wcześniej nie używali tej metody, oto przykład, używając @C
jako zmienna lokalna:
DECLARE @C AS CURSOR;
SET @C = CURSOR FOR SELECT ...;
OPEN @C;
FETCH NEXT FROM @C INTO ...;
...