Há outra vantagem em usar o
DECLARE @local_variable CURSOR
sintaxe que acabei de descobrir. A vantagem ocorre quando um procedimento armazenado chama outro e ambos os procedimentos têm cursores abertos ao mesmo tempo. Se
DECLARE cursor_name CURSOR
é usado para definir os cursores, e ambos os procedimentos usam o mesmo cursor_name, então você obtém Por outro lado, se
DECLARE @local_variable CURSOR
é usado para definir os cursores nos procedimentos armazenados pai e filho, então @local_variable
é local para cada procedimento e não há conflito. Para aqueles que não usaram este método antes, aqui está um exemplo, usando @C
como a variável local:DECLARE @C AS CURSOR;
SET @C = CURSOR FOR SELECT ...;
OPEN @C;
FETCH NEXT FROM @C INTO ...;
...