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
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>"
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
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)
Me ajudou muito, valeu Tiago !