Pela leitura na net, parece que o uso de cursores é desaprovado, mas ninguém parecia dar uma alternativa a eles. No meu caso, preciso definir linha por linha os resultados de uma instrução select e passar algumas colunas de cada linha para outro procedimento armazenado para processamento. A única maneira que vejo de fazer isso é criar um cursor e executar um loop while para usar o cursor para pegar cada linha para que os dados possam ser processados. Então, usar um cursor para percorrer cada linha de uma instrução select para processamento é a melhor maneira de fazer isso ou existe outra maneira? No meu caso, tenho que garantir que cada linha seja processada.
Idealmente, você deve alterar o outro procedimento armazenado para funcionar em um conjunto, em vez de obter valores individuais (ou criar um novo procedimento armazenado que funcione no conjunto). Se você mostrar a lógica real no procedimento e o esquema da(s) tabela(s) afetada(s), em vez de apenas descrever o processo de alto nível como um problema de palavras, poderá obter algumas ideias sobre isso. Uma maneira de evitar chamar o procedimento várias vezes seria passar os valores para as diferentes linhas como um único conjunto usando um parâmetro com valor de tabela (mas, novamente, isso requer reescrever o procedimento ou criar um novo).
Enquanto isso, se for absolutamente necessário usar um loop, você também deve estar disposto a aceitar as consequências de desempenho. Uma maneira de compensar isso - nos casos em que você realmente está usando um cursor como uma passagem única somente leitura por um conjunto - é usar as seguintes palavras-chave ao declarar seu cursor:
Mais informações aqui:
http://www.sqlperformance.com/2012/09/t-sql-queries/cursor-options