У меня есть база данных 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
Рекомендуемый способ решить эту проблему - либо перестроить БД, либо переустановить экземпляр SQL, что, я думаю, не то, что вы хотели здесь.
Есть приложение Вот который утверждает, что может сделать это за вас, его называемый механизм смены коалиции SQL 2000, но также утверждает, что работает с SQL 2005. Я не использовал его, поэтому не могу рассказать вам об этом, но это вариант. Как всегда, сначала убедитесь, что у вас есть полная резервная копия