Em bancos de dados SQL Server, as Collations são utilizadas para definir a maneira como os dados do tipo string (nchar, nvarchar, e ntext) são armazenados.
Em resumo, uma collation define:
- A codificação (Character Set) utilizada para armazenar os caracteres não-Unicode.
- O algoritmo de ordenação utilizado para ordenar o retorno das consultas
O SQL Server permite que seja configurada uma collation default para o servidor,atribuindo-a a todos os campos cuja collation não é explicitamente definida durante a criação.
Além disso, as collations podem ser definidas em diferentes granularidades. É possível definir collations para bancos de dados, tabelas, campos de tabelas e variáveis do SQL Server.
Entretanto, o uso de diversas collations em uma mesma base de dados pode causar problemas ao desenvolvedor, pois algumas collations não são compatíveis entre si. Um problema comum ao escrever consultas envolvendo comparação de campos de texto com collations diferentes é o confilto nessa operação de igualdade.
"Cannot resolve collation conflict for equal to operation"
Uma solução para este problema é indicar ao processador de consultas qual collation deverá ser utilizada para realizar a comparação entre os dois valores. Para isso, deve-se utilizar o comandoCOLLATE. Além disso, pode-se passar como argumento a palavra-chave DATABASE_DEFAULT, que retorna a collation definida para o banco de dados em uso. Veja o exemplo abaixo:
SELECT userName FROM Usuarios
INNER JOIN Clientes ON
Clientes.userName COLLATE DATABASE_DEFAULT
= Usuarios.userName COLLATE DATABASE_DEFAULT
INNER JOIN Clientes ON
Clientes.userName COLLATE DATABASE_DEFAULT
= Usuarios.userName COLLATE DATABASE_DEFAULT
No exemplo, foi feita a junção entre as tabelas "Usuarios" e "Clientes", utilizando-se o campo userName, presente em ambas as tabelas. Supõe-se que este campo possua collations diferentes e conflitantes nestas tabelas. O comando COLLATE resolve o conflito na operação de igualdade do JOIN, utilizando a collation padrão do banco.
http://www.sqlserverdicas.com/2010/08/em-bancos-de-dados-sql-server-as.html
A mesclagem foi concluída após o processamento de 0 alteração(ões) de dados (0 inserção(ões), 0 atualização(ões), 0 exclusão(ões), 502 conflito(s)).
ResponderExcluiresta acontecendo isso comigo, o ASSINANTE consegue ver as informações do PUBLICADOR, mas o inverso nao. (são vendas) pode me ajudar amigo?
Boa Tarde Alexandre,
ResponderExcluirVocê pode informar fixamente o collation de ambas tabelas de forma que necessariamente tenha esse problema de conflito do tipo de grupo de caracteres.
Tenta usar esse exemplo abaixo e verifica qual o collate das suas tabelas , para ver se as mesmas tem o mesmo tipo de collatte:
SELECT userName FROM Usuarios
INNER JOIN Clientes ON
Clientes.userName COLLATE Latin1_General_CI_AI
= Usuarios.userName COLLATE Latin1_General_CI_AI
Att,
Emerson