Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Вы можете использовать предложение 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

Ответ 2

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

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

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