Problemas com collatation – SQL Server – Cannot resolve collation conflict for equal to operation.

No SQL Server, um collation pode ser definido no nível da coluna, quando comparamos duas colunas com collations diferentes em uma query obtemos o erro “Cannot resolve collation conflict for equal to operation.”.


SELECT
	[campos]
FROM
	Tabela1
INNER JOIN
	Tabela2
WHERE
	Tabela1.Campo = Tabela1.Campo

Se as colunas Campo da Tabela1 e Tabela2 tiverem collation’s diferentes, isso gerará o erro de conflito de collation’s. Para solucionar esse conflito podemos utilizar o comando COLLATE DATABASE_DEFAULT após os campos que estão sendo comparados.

SELECT
	[campos]
FROM
	Tabela1
INNER JOIN
	Tabela2
WHERE
	Tabela1.Campo COLLATE DATABASE_DEFAULT = Tabela1.Campo COLLATE DATABASE_DEFAULT

O collation pode afetar os seguintes pontos de nossa query:

  1. Clausula Where
  2. Join
  3. Funções
  4. Bases de dados

Até a próxima.

Anúncios

Case sensitive no SQL Server

Suponha que você precise pesquisar pelo no banco de dados um nome exatamente como ele foi inserido, vamos supor que seja aaaA, mas no seu banco de dados você já tem os valores AAAA, aaaa, AaaA e aaaA, a query abaixo retornará 4 linhas como resultado:

SELECT * FROM tabela WHERE coluna = 'aaaA'

Para fazer o uso de case sensitive nessa coluna basta adicionar o collation como abaixo:

SELECT * FROM tabela WHERE coluna COLLATE Latin1_General_CS_AS = 'aaaA'

Esse collation faz com que a busca seja feita com uso de case sensitive

Para alterar o collation da tabela definitivamente basta alterar a tabela da seguinte maneira:

ALTER TABLE tabela
ALTER COLUMN coluna CHAR(4) COLLATE Latin1_General_CS_AS

Para saber o collation de uma tabela na base de dados para executar o comando abaixo, no segundo resultset você terá o collation

SP_HELP tabela

Espero que esse artigo tenha contribuído para o seu crescimento.

Até a próxima.