Usuário com melhor resposta
qual melhor tipo de cursor - quantidade grande de regsitros

Pergunta
-
Respostas
-
Onde eu trabalho não se pode usar CURSOR, e em alguns lugares que presto consultoria, também não se pode usar.
Eu faço do modo abaixo qdo preciso trabalhar com um volume grande de registros:
declare @au_id char( 11 ) set rowcount 0 select au_id,au_lname,au_fname into #mytemp from authors set rowcount 1 select @au_id = au_id from #mytemp while @@rowcount <> 0 begin set rowcount 0 select au_id,au_lname,au_fname from #mytemp where au_id = @au_id delete #mytemp where au_id = @au_id set rowcount 1 select @au_id = au_id from #mytemp end set rowcount 0
Claro, que é um exemplo e isso varia muito para seu ambiente e número de colunas que se vai utilizar.
[]´s
- Marcado como Resposta Gustavo M. Guimarães segunda-feira, 10 de dezembro de 2012 13:59
Todas as Respostas
-
O melhor seria fazer em batch, mas como não tem jeito aconselharia o fast foward.
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
-
-
Onde eu trabalho não se pode usar CURSOR, e em alguns lugares que presto consultoria, também não se pode usar.
Eu faço do modo abaixo qdo preciso trabalhar com um volume grande de registros:
declare @au_id char( 11 ) set rowcount 0 select au_id,au_lname,au_fname into #mytemp from authors set rowcount 1 select @au_id = au_id from #mytemp while @@rowcount <> 0 begin set rowcount 0 select au_id,au_lname,au_fname from #mytemp where au_id = @au_id delete #mytemp where au_id = @au_id set rowcount 1 select @au_id = au_id from #mytemp end set rowcount 0
Claro, que é um exemplo e isso varia muito para seu ambiente e número de colunas que se vai utilizar.
[]´s
- Marcado como Resposta Gustavo M. Guimarães segunda-feira, 10 de dezembro de 2012 13:59
-
Como o Advaldo disse, eu tambem uso cursores em ultimo caso quando não tem jeito mesmo, mas quando uso sempre use o fast foward que dos que fiz testes tem uma melhor performance e sempre funcionou para o que eu precisava, se quiser de uma olhada neste post:
http://msdn.microsoft.com/pt-br/library/ms188644(v=sql.105).aspx
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
-
-
Sempre cada caso é um caso, faça os testes com este que voce sugeriu, caso não fique bom teste os outros tambem para ver qual melhor se enquadra no seu caso.
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
-
rafa-martin
No meu trabalho costumo usar tabela temporária assim como no exemplo do Advaldo. Dependendo da sua lógica e necessidade você pode até indexar a tabela temporária.
Já li diversas coisas a respeito do assunto e ninguém afirma que um ou outro é melhor..
No link abaixo tem posts do Gustavo Maia Aguiar e do Fabiano Amorim (duas feras de SQL no Brasil) sobre cursores.. vale a pena dar uma olhada.
http://social.msdn.microsoft.com/Forums/pt-BR/transactsqlpt/thread/6df1dc37-79e2-41b9-99b5-74139208688e/
[]'sMariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
-
eu sempre uso tabela temporária ou variável do tipo table. é que e um caso específico.
eu vou usar o forward_only for mesmo. está bem performático. fiz os testes com os outros e estão executando rápido também. coisa de 3,4 segundos a mais.
blz. valeu
-