U kunt het probleem oplossen door de sortering die in een query wordt gebruikt, te dwingen een bepaalde sortering te zijn, bijv. SQL_Latin1_General_CP1_CI_AS
of DATABASE_DEFAULT
. Bijvoorbeeld:
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
In de bovenstaande query zijn a.MyID en b.YourID kolommen met een op tekst gebaseerd gegevenstype. COLLATE
gebruiken dwingt de query om de standaardsortering in de database te negeren en in plaats daarvan de opgegeven sortering te gebruiken, in dit geval SQL_Latin1_General_CP1_CI_AS
.
Wat hier in feite aan de hand is, is dat elke database zijn eigen sortering heeft die "sorteerregels, hoofdlettergevoeligheid en accentgevoeligheidseigenschappen voor uw gegevens biedt" (van http://technet.microsoft.com/en-us/library/ms143726.aspx ) en is van toepassing op kolommen met tekstuele gegevenstypen , bijv. VARCHAR
, CHAR
, NVARCHAR
, enz. Wanneer twee databases verschillende sorteringen hebben, kunt u tekstkolommen niet vergelijken met een operator zoals is gelijk aan (=) zonder het conflict tussen de twee ongelijksoortige sorteringen aan te pakken.