Выполнение соединения между двумя базами данных с разными параметрами сортировки на SQL Server и получение ошибки

Я знаю, я знаю, что я написал в вопросе, я не должен удивляться. Но моя ситуация медленно работает с унаследованной POS-системой, и мой предшественник, по-видимому, не знал о JOIN, поэтому, когда я заглянул на одну из внутренних страниц, которая загружается в течение 60 секунд, я вижу, что это довольно быстро, переписать эти 8 запросов как один запрос с ситуацией JOINs. Проблема в том, что помимо того, что он не знал о JOIN, у него также, кажется, был фетиш для нескольких баз данных и удивление, удивление, что они используют разные сопоставления. Дело в том, что мы используем все «обычные» латинские символы, которые англоговорящие люди рассматривали бы как весь алфавит, и все это выйдет из употребления через несколько месяцев, поэтому мне нужен только лейкопластырь.

Короче говоря, мне нужен какой-то метод для приведения к одному сопоставлению, чтобы я мог сравнивать два поля из двух баз данных.

Точная ошибка:

Не удается разрешить конфликт сортировки между «SQL_Latin1_General_CP850_CI_AI» и «SQL_Latin1_General_CP1_CI_AS» в операции «равно».


person Andrew G. Johnson    schedule 18.02.2010    source источник


Ответы (2)


Вы можете использовать предложение collate в запросе (сейчас я не могу найти свой пример, поэтому мой синтаксис, вероятно, неверен - надеюсь, он укажет вам правильное направление)

select sone_field collate SQL_Latin1_General_CP850_CI_AI
  from table_1
    inner join table_2
      on (table_1.field collate SQL_Latin1_General_CP850_CI_AI = table_2.field)
  where whatever
person Ray    schedule 18.02.2010

Общим способом является принудительное сопоставление с DATABASE_DEFAULT. Это удаляет жесткое кодирование имени сопоставления, которое может измениться.

Это также полезно для временных таблиц и табличных переменных, а также в случаях, когда вы можете не знать параметры сортировки сервера (например, вы являетесь поставщиком, размещающим свою систему на сервере заказчика).

select
    sone_field collate DATABASE_DEFAULT
from
    table_1
    inner join
    table_2 on table_1.field collate DATABASE_DEFAULT = table_2.field
where whatever
person gbn    schedule 18.02.2010
comment
Всегда лучше иметь запасной вариант по умолчанию вместо проверки различных сопоставлений. Донно, почему одна и та же база данных получает разные сопоставления в разных местах :( - person NitinSingh; 23.04.2020