DEV Community

Tiago de Oliveira
Tiago de Oliveira

Posted on

Resolvendo problema de incompatibilidade de Collation SQL Server

Bom dia pessoal, tudo bem?

Venho aqui compartilhar, uma situação na qual me deparei durante minhas demandas. Acho válido compartilhar, pois esse problema pode ocorrer com qualquer um.

Erro:
Toda vez que eu executava uma consulta no banco, eu me deparava com a seguinte mensagem:

Não foi possível resolver o conflito de agrupamento entre "SQL_Latin1_General_CP1_CI_AI" e "Latin1_General_CI_AS" na operação equal to.>

Motivo do erro:
Como a consulta que eu estava tentando executar fazia uso de tabelas temporárias, a mesma possuia uma Colletion diferente da usada na base de dados. Gerando o erro apresentado acima.

Observação:
Quando se faz uso de tabelas temporárias o sql server armazena a mesma no banco "tempdb", na qual é um banco que compõe o sistema de banco de dados do SQL Server

Procedimento usado: Alteração da Collation do SQL Server sem rebuildar os bancos que compõem os sistemas de de banco de dados do SQL Server

Nos passos abaixo eu irei explicar um método na qual a server collation pode ser facilmente alterado através de um parâmetro de inicialização não documentado.
Como isso não é documentado, eu recomendo usá-lo com cuidado extra e por sua conta e risco.

Esse método usa o parâmetro de inicialização -q ao iniciar o serviço do SQL Server.

Passos a seguir:

1.Desanexar todos os bancos de dados do usuário

Desanexar banco
2.Faça backup de todos os outros objetos de banco de dados e servidor necessários
3.Parar serviço do SQL Server
4.Inicie o SQL Server Service usando o prompt de comando

net start "SQL Server (<Instance Name>)" /m /T4022 /T3659 /q"<New Collation Name>"

Comando para alteração do Collation

5.Reiniciar (parar e iniciar) os serviços SQL normalmente sem nenhum parâmetro de inicialização
6.Verifique a alteração no Server Collation

Confirmação da alteração
7.Anexe os bancos de dados do usuário de volta

Nota:

  • Se você não desanexar os bancos de dados do usuário antes de alterar o agrupamento do servidor, o processo alterará o agrupamento de todos os bancos de dados.

  • O sinalizador de rastreamento 3659 permite registrar todos os erros nos logs do servidor SQL

  • O sinalizador de rastreamento 4022 força o SQL Server a ignorar os procedimentos armazenados de inicialização (se houver)

  • O parâmetro de inicialização “-m” força o modo de usuário único.

  • Parâmetro de inicialização -q” reconstrói todos os bancos de dados e objetos para o agrupamento especificado, sem reinstalar a instância ou reconstruir os bancos de dados do sistema.

Caso queira saber mais sobre logs: https://imasters.com.br/banco-de-dados/consultando-o-log-de-erro-do-sql-server-usando-t-sql-2

Referência: https://www.sanssql.com/2013/10/change-sql-server-collation-without.html

Top comments (1)

Collapse
 
_brendinho1 profile image
Brendo

Me ajudou muito, valeu Tiago !