Estamos mudando o servidor de banco e de aplicação aqui da empresa e temos o seguinte problema:
Nossa aplicação salva algumas páginas no banco de dados, em html mesmo.
Em alguns registros existem links que apontam para o endereço do servidor antigo.
Eu preciso alterar todos estes links para direcioná-los ao servidor novo.
É possível via SQL eu alterar somente este endereço?
Por exemplo:
lá no banco eu tenho
a href=“http://nome_do_servidor/index.jsp”
eu preciso alterar o registro para ele ficar assim
a href=“http://nome_do_servidor_novo/index.jsp”
Eu creio que a resposta seja negativa e que minha saída seja criar uma aplicação para fazer isso, mas não sou tão experiente assim com sql e gostaria da opinião de vocês…
Você conseguirá fazer isso dependendo do banco de dados que você usa. Alguns bugs são conhecidos em bancos como o Sybase e SQLServer (até o 7) com campos text (blob e clob). Qual é o banco que você está usando?
ACDias
Estou usando SQL server 2000
e o campo é ntext
W
welington.nunes
Faça o seguinte:
declare@reginteger,-- Codigo do registro que esta sendo utilizado no momento@posinteger,-- Posicao do texto antigo na coluna da sua tabela@valantvarchar(255),-- Valor anterior (que você quer substituir)@valnovovarchar(255)-- Novo valor que você irá inserirselect@reg=0,@valant='ENDERECO ANTERIOR',@valnovo='ENDERECO NOVO'-- while que percorre todos os registros para trocar o codigowhile(1=1)-- Nao funciona apenas 1begin-- Seleciona sempre o registro com o menor codigoselect@reg=min(PK_DA_TABELA)fromTABELAwherePK_DA_TABELA>@reg-- Caso nao encontre sai do loopif(@reg=null)break-- While que procura 'n' vezes o texto no registrowhile(1=1)begin-- Seleciona onde comeca o texto antigoselect@pos=charindex(COLUNA_TEXTO,@valant)-- Caso nao encontre nenhuma string no registroif(@pos<=0)break-- Atualiza essa parte do registroupdateCOLUNA_TEXTO=substring(COLUA_TEXTO,0,@pos)+@valnovo+substring(COLUNA_TEXTO,@pos+datalength(@valnovo),datalength(COLUNA_TEXTO))endend
Com isso deve funcionar (não esqueça de rodar antes em uma base de testes).
ACDias
O tipo ntext é inválido para a função charindex?
existe algum tipo de dado que eu possa substituir que funcione com essa função ou outra função semelhante que permita utilização de ntext?
Obrigado pela ajuda.
W
welington.nunes
Talvez funcione com o TEXT ou senão só varchar.
spycall
Replace não funciona?
UPDATE TABELA SET CAMPO = REPLACE(CAMPO,‘SERVIDOR’,‘SERVIDOR_NOVO’)
ACDias
Aqui faltou um from TABELA correto?
Sem o from tava dando erro de coluna não encontrada.
No entanto esse charindex está retornando 0 mesmo quando a string existe...
Aqui faltou um from TABELA correto?
Sem o from tava dando erro de coluna não encontrada.
No entanto esse charindex está retornando 0 mesmo quando a string existe…
Note que eu inverti a ordem do @valant e do COLUNA_TEXTO.
ACDias
Eu tô achando que esse negócio tá dando loop infinito, apesar da lógica parecer estar correta…
Tenho 300 registros na tabela somente e o script roda por mais de 15 minutos sem finalizar
Obrigado
W
welington.nunes
Pode ser… vale a pena você colocar um print em cada iteracao com o @reg (não esqueca de converter para varchar). Também coloque uma condicao de se chegar a 5 registros da um break.