none
Alterar valores de uma coluna em lote RRS feed

  • Pergunta

  • Pessoal,

    O problema é o seguinte:

    Fiz a migração de um sistema para outro e trouxe todo o cadastro de clientes do sistema antigo.

    Infelizmente o rapaz que fez esta parte, migrou o campo CPF sem formatar o campo como Texto no Excel (Os dados passaram pelo Excel), assim todos os CPF's que começam com ZERO ficaram sem o mesmo!

    Um verdadeiro absurdo!

    Como posso corrigir este problema direto no SQL, sem ter que migrar novamente o cadastro, pois o sistema já está em operação.

    Ou seja, Inserir o zero na frente destes CPF's.

    Já tenho a relação dos cpf's que estão com problema... sao mais de 61.000... (Impossivel fazer na mão!)

    Agradeço desde já pessoal!

    quinta-feira, 6 de novembro de 2014 16:44

Respostas

  • Deleted
    quinta-feira, 6 de novembro de 2014 17:22
  • Se seu campo for um VARCHAR e seu CPF não tiver máscara, você pode adicionar o zero a frente sem problemas.

    UPDATE TabelaPessoa
    SET cpf = '0' + cpf
    WHERE LEN(cpf) < 11

    Douglas,

    A opção do Demetrius vai atender "quase" a totalidade de sua necessidade. Eu apenas acrescentaria um método REPLICATE para casos que o CPF tenha mais zeros no início ou se você precisa manter um padrão para pessoa física ou jurídica (com 14 caracteres).

    Segue o exemplo indicado pelo Demetrius, complementado com o REPLICATE:

    DECLARE @CPF varchar(11) = '123456789'
    SELECT REPLICATE('0', 11-LEN(@CPF)) + @CPF
    
    SET @CPF = '1234567890'
    SELECT REPLICATE('0', 11-LEN(@CPF)) + @CPF
    GO


    Para maiores informações veja:

    http://msdn.microsoft.com/pt-br/library/ms174383.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quinta-feira, 6 de novembro de 2014 17:09
    Moderador
  • Douglas,

    Primeiro verifique se o campo CPF da sua tabela é varchar....

    Segue um exemplo...

    create table #teste (cpf varchar(11));
    go
    
    insert #teste (cpf) values ('6464646464');
    insert #teste (cpf) values ('64646464649');
    go
    
    select * from	#teste
    
    update #teste set cpf = right('0'+CPF,11)
    
    select * from	#teste		
    


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    • Sugerido como Resposta Mr. GMSOFT quinta-feira, 6 de novembro de 2014 16:54
    • Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 6 de novembro de 2014 18:16
    quinta-feira, 6 de novembro de 2014 16:53
  • Se seu campo for um VARCHAR e seu CPF não tiver máscara, você pode adicionar o zero a frente sem problemas.

    UPDATE TabelaPessoa
    SET cpf = '0' + cpf
    WHERE LEN(cpf) < 11

    quinta-feira, 6 de novembro de 2014 16:57

Todas as Respostas

  • Douglas,

    Primeiro verifique se o campo CPF da sua tabela é varchar....

    Segue um exemplo...

    create table #teste (cpf varchar(11));
    go
    
    insert #teste (cpf) values ('6464646464');
    insert #teste (cpf) values ('64646464649');
    go
    
    select * from	#teste
    
    update #teste set cpf = right('0'+CPF,11)
    
    select * from	#teste		
    


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    • Sugerido como Resposta Mr. GMSOFT quinta-feira, 6 de novembro de 2014 16:54
    • Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 6 de novembro de 2014 18:16
    quinta-feira, 6 de novembro de 2014 16:53
  • Se seu campo for um VARCHAR e seu CPF não tiver máscara, você pode adicionar o zero a frente sem problemas.

    UPDATE TabelaPessoa
    SET cpf = '0' + cpf
    WHERE LEN(cpf) < 11

    quinta-feira, 6 de novembro de 2014 16:57
  • Uma correção no meu código.... pode ser que seu CPF esteja faltando mais de um Zero....

    update #teste set cpf = right('000000'+CPF,11)


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    quinta-feira, 6 de novembro de 2014 17:04
  • Se seu campo for um VARCHAR e seu CPF não tiver máscara, você pode adicionar o zero a frente sem problemas.

    UPDATE TabelaPessoa
    SET cpf = '0' + cpf
    WHERE LEN(cpf) < 11

    Douglas,

    A opção do Demetrius vai atender "quase" a totalidade de sua necessidade. Eu apenas acrescentaria um método REPLICATE para casos que o CPF tenha mais zeros no início ou se você precisa manter um padrão para pessoa física ou jurídica (com 14 caracteres).

    Segue o exemplo indicado pelo Demetrius, complementado com o REPLICATE:

    DECLARE @CPF varchar(11) = '123456789'
    SELECT REPLICATE('0', 11-LEN(@CPF)) + @CPF
    
    SET @CPF = '1234567890'
    SELECT REPLICATE('0', 11-LEN(@CPF)) + @CPF
    GO


    Para maiores informações veja:

    http://msdn.microsoft.com/pt-br/library/ms174383.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quinta-feira, 6 de novembro de 2014 17:09
    Moderador
  • Deleted
    quinta-feira, 6 de novembro de 2014 17:22
  • Pessoal,

    Verifiquei aqui que a coluna é um 'Varchar'

    e os dados são incluídos sem separadores.

    Vou efetuar os testes em uma base de homolog (afinal são muitos registros e der algum problema vai ser complicado) e assim que tiver o resultado retorno aqui

    quinta-feira, 6 de novembro de 2014 18:21
  • Deleted
    sexta-feira, 7 de novembro de 2014 06:45
  • Pessoal,

    funcionou perfeitamente, muito Obrigado a todos pela atenção!

    sexta-feira, 7 de novembro de 2014 10:55