Możesz rozwiązać ten problem, wymuszając sortowanie używane w zapytaniu, aby było konkretnym sortowaniem, np. SQL_Latin1_General_CP1_CI_AS
lub DATABASE_DEFAULT
. Na przykład:
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
W powyższym zapytaniu a.MyID i b.YourID będą kolumnami z tekstowym typem danych. Korzystanie z funkcji COLLATE
zmusi zapytanie do zignorowania domyślnego sortowania w bazie danych i zamiast tego użyje podanego sortowania, w tym przypadku SQL_Latin1_General_CP1_CI_AS
.
Zasadniczo chodzi o to, że każda baza danych ma własne sortowanie, które „zapewnia reguły sortowania, wielkość liter i właściwości czułości akcentu dla twoich danych” (z http://technet.microsoft.com/en-us/library/ms143726.aspx ) i dotyczy kolumn z tekstowymi typami danych , np. VARCHAR
, CHAR
, NVARCHAR
itp. Gdy dwie bazy danych mają różne sortowania, nie można porównywać kolumn tekstowych z operatorem takim jak równa się (=) bez rozwiązania konfliktu między dwoma różnymi sortowaniami.