Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como corrigir um conflito de agrupamento em uma consulta do SQL Server?


Você pode resolver o problema forçando o agrupamento usado em uma consulta a ser um agrupamento específico, por exemplo, SQL_Latin1_General_CP1_CI_AS ou DATABASE_DEFAULT . Por exemplo:
SELECT MyColumn
FROM FirstTable a
INNER JOIN SecondTable b
ON a.MyID COLLATE SQL_Latin1_General_CP1_CI_AS = 
b.YourID COLLATE SQL_Latin1_General_CP1_CI_AS

Na consulta acima, a.MyID e b.YourID seriam colunas com um tipo de dados baseado em texto. Usando COLLATE forçará a consulta a ignorar o agrupamento padrão no banco de dados e usar o agrupamento fornecido, neste caso SQL_Latin1_General_CP1_CI_AS .

Basicamente, o que está acontecendo aqui é que cada banco de dados tem seu próprio agrupamento que "fornece regras de classificação, maiúsculas e minúsculas e propriedades de sensibilidade de acento para seus dados" (de http://technet.microsoft.com/en-us/library/ms143726.aspx ) e se aplica a colunas com tipos de dados textuais , por exemplo. VARCHAR , CHAR , NVARCHAR , etc. Quando dois bancos de dados têm agrupamentos diferentes, você não pode comparar colunas de texto com um operador como igual (=) sem resolver o conflito entre os dois agrupamentos diferentes.