Du kan løse problemet ved at tvinge den sortering, der bruges i en forespørgsel, til at være en bestemt sortering, f.eks. SQL_Latin1_General_CP1_CI_AS
eller DATABASE_DEFAULT
. For eksempel:
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
I ovenstående forespørgsel vil a.MyID og b.YourID være kolonner med en tekstbaseret datatype. Brug af COLLATE
vil tvinge forespørgslen til at ignorere standardsorteringen på databasen og i stedet bruge den angivne sortering, i dette tilfælde SQL_Latin1_General_CP1_CI_AS
.
Grundlæggende er det, der foregår her, at hver database har sin egen kollation, som "leverer sorteringsregler, kasus- og accentfølsomhedsegenskaber for dine data" (fra http://technet.microsoft.com/en-us/library/ms143726.aspx ) og gælder for kolonner med tekstdatatyper , for eksempel. VARCHAR
, CHAR
, NVARCHAR
, osv. Når to databaser har forskellige sorteringer, kan du ikke sammenligne tekstkolonner med en operator som lig (=) uden at løse konflikten mellem de to forskellige sorteringer.