Hoje no trabalho, a pedido de um analista de sistemas, coloquei para replicar uma tabela.
Eis que, depois de tudo pronto e configurado, no monitor de replicação do enterprise manager, tenho uma mensagem de erro na replicação, pois não é permitido update de coluna text junto com um index clustered.
Agora mais essa, o SQL Server todo dia me prega uma peça. Bom, consultando meus caros colegas de trabalho pelo google, não encontrei nenhuma solução real para o problema, na replicação. Algumas soluções encontradas eram tirar o índice clustered e tentar update um por vez, dos campos.
Bom resolvi usar minha própria solução: tirar a tabela da replicação, mudar a maldita coluna text para varchar e colocar para replicar novamente.
Como a tabela já era populada e nunca havia tido a necessidade de replicá-la, tive que descobrir qual o tamanho máximo que algum registro da coluna text estava utilizando:
select max(len(convert(varchar(8000),mensagem)))
from base..tabela
Varchar(8000) é por causa do limite do tamanho de uma coluna tipo varchar. Já era sabido que não havia nenhum texto maior que 8000 caracteres na coluna text.
Mensagem é o nome do campo text em questão.
Com a função len() conseguimos o numero de caracteres da coluna text, convertida antes para varchar através da função convert(), pois a função não funciona com colunas text direto. Depois foi só encontrar o maior número adquirido, através da função max().
Rodei o script em todos servidores que possuem a tabela em questão e pude chegar a uma decisão sobre o tamanho do varchar novo que substituirá a coluna text. Coloquei o dobro, só por garantia.
Depois de alterado a coluna text da tabela por varchar, foi só adicionar na replicação e tudo fluiu normalmente.
Neste post mostro como alterar um campo text para varchar:
Converter campo text para varchar – SQL Server 2000
Comentários
Otávio Cruz