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


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

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

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

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

2 55

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

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

это также полезно для таблицы 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