quarta-feira, 21 de julho de 2010

Erro na consulta sql: "Cannot resolve collation conflict for equal to operation"

Hoje ao fazer a seguinte consulta entre duas tabelas , uma tabela normal e outra temporária comparando um campo texto apareceu a seguinte mensagem de erro no sql:"Cannot resolve collation conflict for equal to operation".

SELECT *
FROM #gabarito g , opcao o
WHERE g.texto= o.texto


Nunca tinha visto esse erro. Pesquisando na net encontrei a seguinte explicação:
No novo ambiente, as tabelas vão assumir o collation default, a não ser quando for explicito no campo.Mas o mesmo não acontece com as tabelas temporárias.
O collation dos dois campos que devem ser comparados vão ser diferentes e o servidor vai retornar uma mensagem de erro.

A solução:

SELECT *
FROM #gabarito2 g , opcao o
WHERE g.texto COLLATE collate_do_banco = o.texto COLLATE collate_do_banco


Para descobrir qual o collate do banco:

SELECT SERVERPROPERTY ('Collation')