Cursor
01/09/2005
0
Estou com um problema, tenho uma procedure que criar um cursor com mais de 60.000 registros para eu poder atualizar varias tabelas, o problema ocorre que o cursor se perde no meio do caminho e as tabelas não são atualizadas como deveriam.
Já ouvi falar que no SQL cursores com mais de 10.000 linhas dão esse problema, alguem sabe se isso é verdade e como poderia resolver esse problema.
Muito obrigado.
Emerson
Emersonn
Posts
02/09/2005
Emerson Nascimento
03/09/2005
Marcus.magalhaes
Como vc está declarando o cursor, procure declara-lo como estático, assim vc não tem o risco de alguém atualizar a tabela à qual o seu cursor faz referencia.
Esse problema eu encontrei com versões mais antigas do SS, porém, não estou certo de sua correção em versões novas.
Porém a sugestão do nosso colega de utilizar tabela temporária é bastante válida, uma vez q o cursor tem um custo de CPU bastante grande, o q pode causar perda de performance.
Espero ter ajudado.
Att,
03/09/2005
Emersonn
Eu já pensei em criar uma tabela temporária mas nesse caso não nada, porque eu preciso ler essa qtd de registro e para cada linha lida eu vou atualizar outras linhas em outras tabelas, com isso tenho que ficar dentro de um loop.
Tem outra maneira de criar um loop sem ser pelo cursor.
Esse problema só ocorre com um volume muito grande de registro, tenho outros cursores menores que vão que é uma beleza.
07/09/2005
Marcus.magalhaes
Vc poderia utilizar a tabela temporária e fazer os updates utilizando Join.
Ex.:
Update td
set coluna = valor
From tabele_temp temp Inner join tabela_desejada td On temp.col = td.coluna
Where condição
Espero ter ajudado.
Att,
Clique aqui para fazer login e interagir na Comunidade :)