none
REPLACE Sql Server RRS feed

  • Pergunta

  • Olá.
    Estou com o seguinte problema:
    Numa procedure, tenho que retornar o resultado de um REPLACE de um campo TEXT.

    SELECT REPLACE(text_field, 'x', @variavellocal) FROM tbTable

    Mas ele retorna o erro: "Argument data type text is invalid for argument 1 of replace function."

    Alguém tem uma solução?

    Obrigado.
    quarta-feira, 24 de junho de 2009 17:26

Respostas

Todas as Respostas

  • Boa Tarde,

    Se você estiver com o 2000 realmente não há solução. O comando REPLACE não pode ser utilizado com o TEXT. Você terá que efetuar a substituição na aplicação.

    Se você estiver utilizando o 2005 (ou superior) use o VARCHAR(MAX) ao invés do TEXT.

    [ ]s,

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

    Como importar e exportar imagens entre o SQL Server e o File System ? – Parte II
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!612.entry
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta André Aranha quarta-feira, 24 de junho de 2009 17:42
    quarta-feira, 24 de junho de 2009 17:29
  • André,

         Você não pode usar o REPLACE em um campo do tipo TEXT. Você deve primeiro converter explicitamente para varchar (por exemplo):

    SELECT REPLACE(CAST(text_field as varchar), 'x', @variavellocal) FROM tbTable

    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    quarta-feira, 24 de junho de 2009 17:33
    Moderador
  • Olá!
    Uso o 2005, e aparentemente sua dica funcionou.

    Eu fiz REPLACE ( CAST(campo_texto as varchar(MAX)), 'x', 'y').

    Fazendo REPLACE ( CAST(campo_texto as varchar), 'x', 'y'), sem o MAX, funciona também.

    Nessas duas maneiras só vai retornar o texto em forma de varchar, do tamanho que for? Mesmo que tenha mais de 8.000 caracteres?
    No contexto em que estou desenvolvendo não pode haver corte de caracter de jeito nenhum...

    Obrigado.

    quarta-feira, 24 de junho de 2009 17:36
  • André...

         O varchar(MAX) é o substituto correto para o campo do tipo TEXT. Ou seja, se você puder, troque pelo varchar(MAX). O varchar(MAX) suporta até 2GB por campo...


    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    • Marcado como Resposta André Aranha quarta-feira, 24 de junho de 2009 17:42
    quarta-feira, 24 de junho de 2009 17:41
    Moderador