none
Guardar uma linha em uma variavel, utilizando cursor RRS feed

  • Pergunta

  • --Declarando cursor
    DECLARE crTeste --Nome do cursor
    CURSOR FOR
     
    -- Select utilizado para o cursor
    SELECT * FROM empresa.dbo.' + @Original + ' original 
    WHERE NOT EXISTS
     ( SELECT '+@chavePk+' FROM 										empresa_historico.dbo.' +@historico+ ' historico WHERE 										original.'+@chavePk+' = historico.'+@chavePk+'
     AND cod = '+@codigo+')
     
    
    
    
    --Iniciando transação
    BEGIN TRANSACTION
     
    --Abrindo cursor
    OPEN crTeste 
     
    
    FETCH crTeste 
     			
    
    --Fechando e desalocando cursor
    CLOSE crTeste 
    DEALLOCATE crTeste 
     
    
    --Confirmando transação
    COMMIT TRANSACTION

    Eu quero guardar a linha inteira numa variavel, é possivel??

    Quero fazer isso pra depois fazer um insert da linha toda em outra tabela!

    terça-feira, 27 de abril de 2010 12:28

Respostas

  • Bom Dia,

    Não é possível colocar uma linha em uma variável. O que você pode fazer é converter todas as colunas para VARCHAR e concatená-las colocando o resultado em uma variável VARCHAR.

    Se a idéia é fazer um INSERT da linha em uma tabela não seria mais fácil fazer um INSERT com SELECT ? Isso seria muito mais performático que o uso de um cursor.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com 


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 27 de abril de 2010 13:27
    • Marcado como Resposta LeticiaAmorim quarta-feira, 25 de agosto de 2010 15:02
    terça-feira, 27 de abril de 2010 13:27

Todas as Respostas

  • Bom Dia,

    Não é possível colocar uma linha em uma variável. O que você pode fazer é converter todas as colunas para VARCHAR e concatená-las colocando o resultado em uma variável VARCHAR.

    Se a idéia é fazer um INSERT da linha em uma tabela não seria mais fácil fazer um INSERT com SELECT ? Isso seria muito mais performático que o uso de um cursor.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com 


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 27 de abril de 2010 13:27
    • Marcado como Resposta LeticiaAmorim quarta-feira, 25 de agosto de 2010 15:02
    terça-feira, 27 de abril de 2010 13:27
  • Eu acredito que sim..

     

    Mas eu preciso testar a performace utilizando cursor, pra saber o que fica mais vantajoso!

     

    A ideia é essa mesma, fazer um insert com select!

     

    Só que eu não consigo implementar usando o cursor!

    terça-feira, 27 de abril de 2010 13:54
  • Olá Letícia,

    A leitura do cursor é feita linha a linha e o INSERT SELECT é feita leituras em blocos. Não há como um cursor que lê linha a linha superar o desempenho de um INSERT com SELECT direto. O cursor além de mais lento incorre mais codificação.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com 


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 27 de abril de 2010 14:29
  • Blz..

    mas vc pode me falar como eu faço utilizando cursor?

    terça-feira, 27 de abril de 2010 14:47
  • Não serve guardar, cada coluna em uma variável??
    "ѕó αqυєℓєѕ q тєм α ¢σяαgєм ∂є ¢αмιηнαя, ρσ∂єм νινєя тσ∂σѕ σѕ ∂ιαѕ ηα ¢єятєzα ∂є ¢нєgαя" msn: poseidonfba@hotmail.com
    quarta-feira, 28 de abril de 2010 14:18
  • Serviria se fosse poucas tabelas....

    mas eu preciso copiar varias tabelas e seria trabalhoso criar uma prc para cada uma.

    A minha ideia seria usar um rowtype como no Oracle

    Achei que tivesse um comando correspondente pro SQL SERVER

    quarta-feira, 28 de abril de 2010 14:33