Antes eu tentava evitar o uso do cursor por causa de problemas de desempenho. Mas agora tenho que fazer alguns cálculos para atingir alguns objetivos. Eu tenho um procedimento armazenado que tem um código como este:
DECLARE Outer_Cursor CURSOR FOR...
OPEN Outer_Cursor
FETCH NEXT FROM Outer_Cursor INTO ...
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE Inner_Cursor CURSOR FOR...
OPEN Outer_Cursor
FETCH NEXT FROM Inner_Cursor INTO ...
WHILE @@FETCH_STATUS = 0
BEGIN
...
FETCH NEXT FROM Inner_Cursor INTO ...
END
CLOSE Inner_Cursor
DEALLOCATE Inner_Cursor
FETCH NEXT FROM Outer_Cursor INTO ...
END
CLOSE Outer_Cursor
DEALLOCATE Outer_Cursor
Minha pergunta é: é possível evitar (minimizar) a recriação tão cara do cursor para o cursor interno. Como posso reutilizar a declaração interna do cursor, é possível?
Obrigada.
Sugiro que, em vez de usar o cursor interno, se você quiser evitar sua criação e liberação para cada etapa do cursor externo, use uma tabela temporária para buscar dados e truncá-los para cada etapa.
Dessa forma, você o criará apenas uma vez e a operação de truncamento não será registrada, portanto, não causará problemas.
PS: nesta situação, sou sempre a favor de tabelas temporárias com uma coluna de identidade que será repetida para cada registro (ou lotes :-). Mas concordo com os comentários, é melhor nos contar o problema e talvez encontremos outra solução.