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?
declare @reg integer, -- Codigo do registro que esta sendo utilizado no momento
@pos integer, -- Posicao do texto antigo na coluna da sua tabela
@valant varchar(255), -- Valor anterior (que você quer substituir)
@valnovo varchar(255) -- Novo valor que você irá inserir
select @reg = 0, @valant = 'ENDERECO ANTERIOR', @valnovo = 'ENDERECO NOVO'
-- while que percorre todos os registros para trocar o codigo
while(1=1) -- Nao funciona apenas 1
begin
-- Seleciona sempre o registro com o menor codigo
select @reg = min(PK_DA_TABELA) from TABELA where PK_DA_TABELA > @reg
-- Caso nao encontre sai do loop
if(@reg=null)
break
-- While que procura 'n' vezes o texto no registro
while(1=1)
begin
-- Seleciona onde comeca o texto antigo
select @pos = charindex(COLUNA_TEXTO, @valant)
-- Caso nao encontre nenhuma string no registro
if(@pos<=0)
break
-- Atualiza essa parte do registro
update COLUNA_TEXTO = substring(COLUA_TEXTO, 0, @pos) + @valnovo + substring(COLUNA_TEXTO, @pos + datalength(@valnovo),datalength(COLUNA_TEXTO))
end
end
Com isso deve funcionar (não esqueça de rodar antes em uma base de testes).
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…
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.