none
Atualizar um campo com zeros a esquerda RRS feed

  • Pergunta

  • Olá,

    Tenho um campo varchar de 9 posições que está preenchido com vários valores agora, preciso atualizar esse campo com zeros a esquerda de todos que tiverem dados menor que o tamanho do campo(9).

    ex. 97567 - precisa ser atualizado para 000097567. Vejam o update que fiz:

    update

    Se eu uso = dá o seguinte erro: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated.

    Se eu uso in dá o seguinte erro: Incorrect syntax near the keyword 'in'. 

    Alguma ajuda ????

     

    Obrigado.

     


    Gilberto
    tbAssociado set
    CDC = (select replicate('0',9 - len(CDC)) + tbAssociado.CDC from tbAssociado
    inner join tbSituacao on tbAssociado.idAssociado = tbSituacao.idAssociado
    where tbSituacao.DataCancelamento is null)
    terça-feira, 31 de agosto de 2010 17:24

Respostas

  • Gilberto,

    Acredito que assim funcionaría:

    update tbAssociado 
    	set	CDC = replicate('0',9 - len(CDC)) + tbAssociado.CDC 
    from tbAssociado
    	inner join tbSituacao 
    		on tbAssociado.idAssociado   = tbSituacao.idAssociado
    		and tbSituacao.DataCancelamento is null
    
    

    realmente o seu subselect retornaría mais que um valor, pq não houve uma amarração entre ele a tabela que está sendo atualizada, no caso, no id do associado.

    att.
    Rafael Melo

    terça-feira, 31 de agosto de 2010 18:10
  • Gilberto,

    O valor de retorno do SET CAMPO = (SELECT) tem que ser unico para cada linha a ser modificada pelo UPDATE. Então se está retorno mais de uma linha alguma você tem que garantir pelo JOIN a unicidade do retorno do SELECT.

    []´s

     

    Leivio Fontenele - www.dbaninja.com

    Tente fazer um relacionamento externo com a tabela a ser atualizada


    MCP | MCTS | MCITP - DBA SQL Server Sênior www.dbaninja.com | www.cleverdata.com.br
    terça-feira, 31 de agosto de 2010 18:10

Todas as Respostas

  • Gilberto,

    Acredito que assim funcionaría:

    update tbAssociado 
    	set	CDC = replicate('0',9 - len(CDC)) + tbAssociado.CDC 
    from tbAssociado
    	inner join tbSituacao 
    		on tbAssociado.idAssociado   = tbSituacao.idAssociado
    		and tbSituacao.DataCancelamento is null
    
    

    realmente o seu subselect retornaría mais que um valor, pq não houve uma amarração entre ele a tabela que está sendo atualizada, no caso, no id do associado.

    att.
    Rafael Melo

    terça-feira, 31 de agosto de 2010 18:10
  • Gilberto,

    O valor de retorno do SET CAMPO = (SELECT) tem que ser unico para cada linha a ser modificada pelo UPDATE. Então se está retorno mais de uma linha alguma você tem que garantir pelo JOIN a unicidade do retorno do SELECT.

    []´s

     

    Leivio Fontenele - www.dbaninja.com

    Tente fazer um relacionamento externo com a tabela a ser atualizada


    MCP | MCTS | MCITP - DBA SQL Server Sênior www.dbaninja.com | www.cleverdata.com.br
    terça-feira, 31 de agosto de 2010 18:10
  • Rafael,

    Obrigado. Funcionou.


    Gilberto
    terça-feira, 31 de agosto de 2010 19:00
  • Leivio,

    Realmente estava retornado mais de uma linha.

    Obrigado.


    Gilberto
    terça-feira, 31 de agosto de 2010 19:01