Usuário com melhor resposta
Removendo caracteres especiais de mudança de collate SQL_Latin1_General_CP850_CI_AS para Latin1_General_CI_AS

Pergunta
-
Boa tarde pessoal, estou com a coluna de uma tabela que ficou com caracteres especiais após mudança de collate SQL_Latin1_General_CP850_CI_AS para Latin1_General_CI_AS.
Ex:
@#30075@1&NOo Reagente@VREF;NO
@#30022@1%3600@VREF;NOo reagen
@#877@2&NOo Reagente@VREF;NOo
@#1621@1%07:00@#1621@2%01:30@#
@#30058@1%92530
@#30175@1&NOo Reagente@VREF;NO
@#30005@3%4580,00@#30005@1%126
@#30179@1&NOo Reagente@VREF;NO
@#1612@1&NOo Reagente@VREF;NOo
@#30181@1%127000@VREF;Imunidad
@#30182@3&NOo Reagente@VREF;NO
@#30011@3&L.Turvo@#30011@2&Ama
@#6152@1%61300@VREF;NOo reagen
@#96@1%NOo Reagente@VREF;AusUn
@#30109@1&NOo Reagente@MET;000Tentei ajustar o script abaixo pra fazer a mudança, mas não obtive sucesso, retornando o erro abaixo:
Msg 8116, Level 16, State 1, Line 1
Argument data type text is invalid for argument 1 of replace function.SELECT Replace(Replace(Replace(Replace(Replace(Replace(Replace( Replace( Replace( Replace( Replace( Replace( Replace( Replace( Replace( Replace( Replace( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( coluna , 'é' , 'e' ), 'ê' , 'e'), 'ë' , 'e' ), 'è' , 'e'), 'É', 'E'), 'È', 'E'), 'Ê', 'E'), 'Ë' , 'E'), 'ð', 'D'), 'Ð' , 'D'), 'â', 'a'), 'à', 'a'), 'á', 'a'), 'ã' , 'a'), 'æ', 'a'), 'à' , 'a'), 'å', 'a'), 'Å', 'A'), 'À', 'A'), 'Á', 'A') , 'Â', 'A'), 'Ã', 'A') , 'Æ', 'A'), 'ä', 'a'), 'Ä', 'A'), 'ï', 'i'), 'î' , 'i'), 'ì', 'i'), 'í' , 'i'), 'Ì', 'I'), 'Í', 'I'), 'Î', 'I'), 'Ï', 'I') , 'ô', 'o'), 'ò', 'o') , 'ó', 'o'), 'õ', 'o'), 'ø', 'o'), 'Ò', 'O'), 'Ó' , 'O'), 'Ô', 'O'), 'Õ' , 'O'), 'Ø', 'O'), 'ö', 'o'), 'Ö', 'O'), 'û' , 'u') , 'ù', 'u'), 'ú', 'u' ) , 'Ù', 'U'), 'Ú', 'U'), 'Û', 'U'), 'Ü', 'U' ), 'ü' , 'u' ), 'ñ', 'n'), 'Ñ' , 'N'), 'Ç', 'C' ), 'ç', 'c'), 'ý', 'y') , 'ÿ', 'y'), 'Ý', 'Y' ), 'þ', 'T'), 'Þ', 't'), 'ß', 'ss') FROM tabela go
Gostaria de um help. Agradeço desde já!
- Editado Jerfeson S. Barbosa segunda-feira, 8 de abril de 2019 20:53
Respostas
-
Olá galera, conseguimos identificar onde estava o problema. Só uma explicação resumida. A coluna que condicionava esses dados usa um algorítimo desenvolvido pelo próprio ERP. Em trabalho conjunto com o consultor técnico do ERP conseguimos decifrar os caracteres que são bem específicos do cenário e com isso decidimos criar um UPDATE com replaces para alterar o que realmente precisa ser modificado. Foi a solução imediata mais rápida e precisa para solucionar a sequela da trocar do collation.
Por exemplo:
@#30075@1&NOo Reagente@VREF;NO
Alguns caracteres não deveria ser mexidos, pois fazem parte da estrutura do texto dentro do sistema que combina com o algorítimo interno do sistema. Alguns deles são @, &, #, ;, etc.
Com relação a mudança do collate, todos foram alterados sim, tanto do banco de dados quanto de todas as colunas.
- Editado Jerfeson S. Barbosa terça-feira, 9 de abril de 2019 12:38
Todas as Respostas
-
Jerfeson,
Cara, com esta quantidade de replaces aplicados, fica difícil encontrar em qual das condições o element do tipo text é inválido.
Minha sugestão, quebre este select em vários, para você conseguir realizar o replace desejado, depois transformamos em um único.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Olá, verifica se a coluna da sua tabela alterou o Collation, pois pode ter alterado da tabela, mas não alterou da Column... tenta o link para ajustar o Collation das Columns...
https://stackoverflow.com/a/18123429
Se ajudou, marque como resposta! Obrigado.
-
-
Viva Jerferson,
A mim por esse link https://www.mssqltips.com/sqlservertip/3519/changing-sql-server-collation-after-installation/
isso ajudou me resolver o problema.
Cumprimentos,
João Gouveia -
Boa tarde pessoal, estou com a coluna de uma tabela que ficou com caracteres especiais após mudança de collate SQL_Latin1_General_CP850_CI_AS para Latin1_General_CI_AS.
Ex:
@#30075@1&NOo Reagente@VREF;NO
@#30022@1%3600@VREF;NOo reagen
@#877@2&NOo Reagente@VREF;NOo
@#1621@1%07:00@#1621@2%01:30@#
@#30058@1%92530
@#30175@1&NOo Reagente@VREF;NO
@#30005@3%4580,00@#30005@1%126
@#30179@1&NOo Reagente@VREF;NO
@#1612@1&NOo Reagente@VREF;NOo
@#30181@1%127000@VREF;Imunidad
@#30182@3&NOo Reagente@VREF;NO
@#30011@3&L.Turvo@#30011@2&Ama
@#6152@1%61300@VREF;NOo reagen
@#96@1%NOo Reagente@VREF;AusUn
@#30109@1&NOo Reagente@MET;000Jerfeson, mas o que está errado nessa amostra de dados acima? Você não informou como era originalmente o conteúdo.
---
A respeito de retirar acentuação, a forma mais simples que encontrei foi a de utilizar collate sql_latin1_general_cp1251_ci_as ou sql_latin1_general_cp1250_ci_as, conforme artigo de Wolnei Maia, publicado em 2008: Como retirar acento de caracteres. É claro que a mesma solução é encontrada em artigos de outras pessoas, mas trata-se de plágio quando não se cita o autor original ou a URL de onde foi copiada.
Mas não acho que o problema seja de retirar acentuação e sim de fazer a correta conversão de collate.
---
A alteração foi em tabela de ambiente de desenvolvimento ou de produção?
Como foi efetuada?
Qual o COLLATE original da instância, do banco de dados e das colunas?
José Diz Belo Horizonte, MG - Brasil [T-SQL performance tuning: Porto SQL] [e-mail]
Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.
José,
Eu não citei a situação da alteração do Collate, pois da maneira que o código esta postado, na minha opinião realizar qualquer tipo de alteração no collate poderá impactar e refletir totalmente no ambiente.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Olá galera, conseguimos identificar onde estava o problema. Só uma explicação resumida. A coluna que condicionava esses dados usa um algorítimo desenvolvido pelo próprio ERP. Em trabalho conjunto com o consultor técnico do ERP conseguimos decifrar os caracteres que são bem específicos do cenário e com isso decidimos criar um UPDATE com replaces para alterar o que realmente precisa ser modificado. Foi a solução imediata mais rápida e precisa para solucionar a sequela da trocar do collation.
Por exemplo:
@#30075@1&NOo Reagente@VREF;NO
Alguns caracteres não deveria ser mexidos, pois fazem parte da estrutura do texto dentro do sistema que combina com o algorítimo interno do sistema. Alguns deles são @, &, #, ;, etc.
Com relação a mudança do collate, todos foram alterados sim, tanto do banco de dados quanto de todas as colunas.
- Editado Jerfeson S. Barbosa terça-feira, 9 de abril de 2019 12:38