Параметры сортировки определяют способ сравнения строк.Всякий раз, когда вы делаете сравнение между строковыми типами (упорядочение требует сравнения тоже), вы должны применять одни и те же критерии, это тип сопоставления.
CREATE TABLE #StringLatin (
String VARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS)
CREATE TABLE #StringBIN (
String VARCHAR(100) COLLATE Latin1_General_BIN)
SELECT
'Oops!!!'
FROM
#StringLatin AS L
INNER JOIN #StringBIN AS B ON L.String = B.String
Msg 468, Уровень 16, Состояние 9, Линия5 Не удается разрешить конфликт сопоставления между «Latin1_General_BIN» и «SQL_Latin1_General_CP1_CI_AS» в операции «равно».
Проблема здесь заключается в L.String = B.String
, поскольку оба были созданы с разными типами сопоставления.
Вы можете решить эту проблему, изменив параметры сортировки в операторе создания таблицы (так, чтобы он совпадал с тем, к которому вы присоединяетесь позже) или непосредственно при сравнении внутри SELECT
.
SELECT
'Works'
FROM
#StringLatin AS L
INNER JOIN #StringBIN AS B ON L.String = B.String COLLATE SQL_Latin1_General_CP1_CI_AS
.параметры сортировки по умолчанию могут меняться от сервера к серверу, и это повлияет на все таблицы, в которых не указан конкретный порядок сортировки, что может вызвать проблемы при работе с различными базами данных.Чтобы найти параметры сортировки по умолчанию, вы можете использовать:
SELECT SERVERPROPERTY('collation');