none
UPDATE SEQUÊNCIAL RRS feed

  • Pergunta

  • TENHO UMA TABELA FINA0000 AONDE MANTENHO MEU FINANCEIRO E ELA POSSUI UMA COLUNA CÓDIGO AONDE EM UMA SEQUÊNCIA DE 684 REGISTROS QUE VÃO DO NÚMERO 365091 A 365778, SÓ QUE ESSES REGISTROS POSSUI DUPLICIDADE DEVIDO A UMA COLUNA TIPO QUE SÃO DO TIPO E OU A MAS QUERO MODIFICAR SEQUENCIALMENTE VIA UPDATE SQL PARA OUTRA SEQUENCIA DE NUMERO QUE VÃO DE 385091 A 385778 E DO TIPO A TERIA COMO?
    quarta-feira, 6 de julho de 2011 11:04

Respostas

  • Bom dia!

    Ronald,

       Se o campo for identity, então não é possível atualizá-lo. Primeiro, você teria que modificar a tabela, retirando o identity, para atualizar e colocando de novo. Se for o caso, me avisa, porque tem que haver todo um cuidado em relação a isso.

       Se não for o caso e se eu entendi bem o que você deseja, acho que este código irá ajudá-lo.

    declare @tabela as table(codigo int null,tipo char(1) null)
    declare @i as int
    select @i = 1
    
    while @i <= 687
    begin
      insert into @tabela values(@i, 'T')
      select @i = @i + 1
    end
    
    declare c_tabela cursor for
    select
      codigo
    from
      @tabela
    where
      codigo between 1 and 687 --Colocar a sequência que você quer atualizar
    order by
      codigo
    
    open c_tabela
    
    declare @codigo int
    
    fetch next from c_tabela into @codigo
    
    select @i = 365778
    
    while @@FETCH_STATUS = 0
    begin
      update @tabela set codigo = @i where codigo = @codigo
      select @i = @i + 1
    
      fetch next from c_tabela into @codigo
    end
    
    select * from @tabela
    
    close c_tabela
    deallocate c_tabela
    
    
       Apesar do cursor ter um custo um pouco pesado de processamento, são poucos registros para atualizar e creio que será uma forma de resolver seu problema.

       Qualquer dúvida, estou à disposição.

    Att,


    Fredy Esmeraldo
    Microsoft MCP, MCTS, MCITP Database Administrator 2008
    Visite o meu blog: http://fredyesmeraldo.wordpress.com
    Me siga no twitter: @fredyesmeraldo
    LinkedIN: Fredy Esmeraldo
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    • Sugerido como Resposta Fredy Esmeraldo quarta-feira, 6 de julho de 2011 18:16
    • Marcado como Resposta Eder Costa terça-feira, 12 de julho de 2011 18:54
    quarta-feira, 6 de julho de 2011 12:10
  • Ronald, realmente, as questões aqui postadas são relativas ao SQL Server. No caso do Firebird, tente o fórum http://forums.devshed.com/firebird-sql-development-61/
    Roberson Ferreira - Database Developer

    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.

    • Sugerido como Resposta Fredy Esmeraldo quinta-feira, 7 de julho de 2011 16:00
    • Marcado como Resposta Eder Costa terça-feira, 12 de julho de 2011 18:55
    quarta-feira, 6 de julho de 2011 20:57
    Moderador

Todas as Respostas

  • Bom dia!

    Ronald,

       Se o campo for identity, então não é possível atualizá-lo. Primeiro, você teria que modificar a tabela, retirando o identity, para atualizar e colocando de novo. Se for o caso, me avisa, porque tem que haver todo um cuidado em relação a isso.

       Se não for o caso e se eu entendi bem o que você deseja, acho que este código irá ajudá-lo.

    declare @tabela as table(codigo int null,tipo char(1) null)
    declare @i as int
    select @i = 1
    
    while @i <= 687
    begin
      insert into @tabela values(@i, 'T')
      select @i = @i + 1
    end
    
    declare c_tabela cursor for
    select
      codigo
    from
      @tabela
    where
      codigo between 1 and 687 --Colocar a sequência que você quer atualizar
    order by
      codigo
    
    open c_tabela
    
    declare @codigo int
    
    fetch next from c_tabela into @codigo
    
    select @i = 365778
    
    while @@FETCH_STATUS = 0
    begin
      update @tabela set codigo = @i where codigo = @codigo
      select @i = @i + 1
    
      fetch next from c_tabela into @codigo
    end
    
    select * from @tabela
    
    close c_tabela
    deallocate c_tabela
    
    
       Apesar do cursor ter um custo um pouco pesado de processamento, são poucos registros para atualizar e creio que será uma forma de resolver seu problema.

       Qualquer dúvida, estou à disposição.

    Att,


    Fredy Esmeraldo
    Microsoft MCP, MCTS, MCITP Database Administrator 2008
    Visite o meu blog: http://fredyesmeraldo.wordpress.com
    Me siga no twitter: @fredyesmeraldo
    LinkedIN: Fredy Esmeraldo
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    • Sugerido como Resposta Fredy Esmeraldo quarta-feira, 6 de julho de 2011 18:16
    • Marcado como Resposta Eder Costa terça-feira, 12 de julho de 2011 18:54
    quarta-feira, 6 de julho de 2011 12:10
  • Mais esta forma que você me passou e sobre sql server ou firebird pois no meu caso e para firebird
    quarta-feira, 6 de julho de 2011 15:39
  • Ronald,

       Por se tratar de um fórum de Microsoft SQL Server tratamos sempre sobre o mesmo. Talvez haja um fórum de Firebird que possa te ajudar melhor.

       Desculpe por não poder ajudar, mas realmente não conheço o Firebird.

    Att,


    Fredy Esmeraldo
    Microsoft MCP, MCTS, MCITP Database Administrator 2008
    Visite o meu blog: http://fredyesmeraldo.wordpress.com
    Me siga no twitter: @fredyesmeraldo
    LinkedIN: Fredy Esmeraldo
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    • Sugerido como Resposta Fredy Esmeraldo quinta-feira, 7 de julho de 2011 16:00
    quarta-feira, 6 de julho de 2011 17:59
  • Ronald, realmente, as questões aqui postadas são relativas ao SQL Server. No caso do Firebird, tente o fórum http://forums.devshed.com/firebird-sql-development-61/
    Roberson Ferreira - Database Developer

    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.

    • Sugerido como Resposta Fredy Esmeraldo quinta-feira, 7 de julho de 2011 16:00
    • Marcado como Resposta Eder Costa terça-feira, 12 de julho de 2011 18:55
    quarta-feira, 6 de julho de 2011 20:57
    Moderador