Можете да разрешите проблема, като принудите съпоставянето, използвано в заявка, да бъде конкретно съпоставяне, напр. SQL_Latin1_General_CP1_CI_AS
или DATABASE_DEFAULT
. Например:
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
В горната заявка a.MyID и b.YourID ще бъдат колони с текстово базиран тип данни. Използване на COLLATE
ще принуди заявката да игнорира съпоставянето по подразбиране в базата данни и вместо това ще използва предоставеното съпоставяне, в този случай SQL_Latin1_General_CP1_CI_AS
.
По същество това, което се случва тук, е, че всяка база данни има свое собствено съпоставяне, което „осигурява правила за сортиране, свойства за чувствителност на малки и големи букви за вашите данни“ (от http://technet.microsoft.com/en-us/library/ms143726.aspx ) и се отнася за колони с текстови типове данни , напр. VARCHAR
, CHAR
, NVARCHAR
и т.н. Когато две бази данни имат различни съпоставяния, не можете да сравнявате текстови колони с оператор като equals (=), без да адресирате конфликта между двете различни съпоставяния.