none
Trabalhar com dois bancos com collates diferentes RRS feed

  • Pergunta

  • Pessoal, estou com uma dificuldade, que vou tentar explicar abaixo:
    Tenho uma aplicação rodando em um servidor, no qual terei que dar manutenção e por ser sistemas legados, não poderei alterar as configurações das bases de dados. Eu preciso criar uma procedure que vá reunir em uma tabela temporária informações. E estas informações, posteriormente, serão lidas (todas) e em uma outra tabela, em outra base de dados - no mesmo servidor é claro, terei que updatar um campo. Agora como proceder se os collates são diferentes? Resumindo:
    Terei 3 consultas no banco de dados XXXX onde alimentarei uma tabela temporária e depois, no banco de dados YYYYY terei que dar um UPDATE em uma única tabela. Lembrando que ambas possuem um campo chave, exemplo: CPF_NUM. Minha pergunta, como proceder sem ter que modificar o collate? Muito obrigado.

    ERRO: Mensagem 468, Nível 16, Estado 9, Linha 8
    Não foi possível resolver o conflito de agrupamento entre "SQL_Latin1_General_CP1_CI_AI" e "SQL_Latin1_General_CP850_CI_AI" na operação equal to.

    -----------------------------------------------------------------------------
    Microsoft SQL Server Management Studio 14.0.17289.0
    Ferramentas de Cliente do Microsoft Analysis Services 14.0.1016.283
    Microsoft Data Access Components (MDAC)         10.0.17763.1
    Microsoft MSXML         3.0 5.0 6.0 
    Microsoft Internet Explorer         9.11.17763.0
    Microsoft .NET Framework         4.0.30319.42000
    Sistema Operacional         6.3.17763
    quinta-feira, 29 de outubro de 2020 18:25

Todas as Respostas

  • Sérgio,

    Talvez uma alternativa não muito versátil mas cabível, seja você diretamente nos seus respectivos comandos Selects declarar os collates que você tem a necessidade de utilizar, para forçar o SQL Server a garantir a compatibilidade dos dados nas questões de apresentação e manipulação.

    Veja abaixo os exemplos:

    -- Informando o Collate na cláusula Where --
    Select campo From tabela 
    Where campo Collate Latin_General_CI_AS Like '%á%'
    Go
    
    -- Exmeplo 2 -- Informando o Collate diretamente com a declaração das colunas --
    Select campo Collate Latin_General_CI_AS From tabela 
    Where campo Collate Latin_General_CI_AS Like '%á%'
    Go


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 30 de outubro de 2020 22:14