Du kan lösa problemet genom att tvinga sorteringen som används i en fråga att vara en viss sortering, t.ex. SQL_Latin1_General_CP1_CI_AS
eller DATABASE_DEFAULT
. Till exempel:
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 ovanstående fråga skulle a.MyID och b.YourID vara kolumner med en textbaserad datatyp. Använder COLLATE
kommer att tvinga frågan att ignorera standardsorteringen i databasen och istället använda den tillhandahållna sorteringen, i det här fallet SQL_Latin1_General_CP1_CI_AS
.
Det som i grund och botten händer här är att varje databas har sin egen sortering som "tillhandahåller sorteringsregler, skiftläges- och accentkänslighetsegenskaper för dina data" (från http://technet.microsoft.com/en-us/library/ms143726.aspx ) och gäller kolumner med textdatatyper , t.ex. VARCHAR
, CHAR
, NVARCHAR
, etc. När två databaser har olika sortering kan du inte jämföra textkolumner med en operator som lika (=) utan att ta itu med konflikten mellan de två olika sorteringarna.