none
Removendo caracteres especiais de mudança de collate SQL_Latin1_General_CP850_CI_AS para Latin1_General_CI_AS RRS feed

  • 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;000

    Tentei 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á!


    segunda-feira, 8 de abril de 2019 20:49

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. 



    terça-feira, 9 de abril de 2019 12:37

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]

    segunda-feira, 8 de abril de 2019 22:31
  • 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.

    terça-feira, 9 de abril de 2019 01:06
  • Deleted
    terça-feira, 9 de abril de 2019 10:29
  • 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

    terça-feira, 9 de abril de 2019 10:39
  • 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;000

    Jerfeson, 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]

    terça-feira, 9 de abril de 2019 12:32
  • 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. 



    terça-feira, 9 de abril de 2019 12:37