Назад | Перейти на главную страницу

Проблемы сортировки SQL Server 2005

У меня есть база данных SQL Server 2005, которая была построена с использованием параметров сортировки, отличных от той, которая используется на наших серверах. Я получаю эту ошибку всякий раз, когда пытаюсь запустить сайт:

Сообщение об исключении: не удается разрешить конфликт сопоставления между «Latin1_General_CI_AS» и «SQL_Latin1_General_CP1_CI_AS» в операции равенства

Кто-нибудь знает, как я могу исправить ошибку, не перестраивая базу данных?

Использовать COLLATE Database_Default для принуждения к объединению или сравнению.

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

SELECT
  *
FROM
 dbo.ThisTable t2
 join
 dbo.ThatTable t1 on t1.name = t2.name COLLATE Database_Default
--or dbo.myTable t1 on t1.name COLLATE Database_Default = t2.name COLLATE Database_Default
--or dbo.myTable t1 on t1.name COLLATE Database_Default = t2.name

Если проблема заключается в запросе и у вас нет возможности перестроить эту базу данных, вы можете использовать ключевое слово COLLATE, например:

 SELECT *
 FROM OtherServer.xyz.dbo.Table2 t2
     inner join myTable t1 
         on t1.name = t2.name COLLATE SQL_Latin1_General_CP1_CI_AS

Здесь Документация MSDN для COLLATE.

Рекомендуемый способ решить эту проблему - либо перестроить БД, либо переустановить экземпляр SQL, что, я думаю, не то, что вы хотели здесь.

Есть приложение Вот который утверждает, что может сделать это за вас, его называемый механизм смены коалиции SQL 2000, но также утверждает, что работает с SQL 2005. Я не использовал его, поэтому не могу рассказать вам об этом, но это вариант. Как всегда, сначала убедитесь, что у вас есть полная резервная копия