Проблема сортировки - SQL Server 2005 - PullRequest
4 голосов
/ 14 июля 2009

Я хотел бы понять эту ошибку, которую я получаю на экземпляре SQL Server 2005. Ошибка ниже:

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

Обе базы данных, включенные в простой запрос, имеют Latin1 General CI AI , но ранее имели SQL Latin1 General CP1 CI AI . Я изменил параметры сортировки, пытаясь сопоставить их, но все равно получаю вышеупомянутую ошибку каждый раз, когда пытаюсь присоединить временную таблицу к таблице из пользовательской базы данных. У меня нет проблем с созданием временных таблиц.

Ответы [ 5 ]

6 голосов
/ 14 июля 2009

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

select c.name, o.orderid from customer as c
inner join order as o on c.custid = o.custid COLLATE SQL_Latin1_General_CP1_CI_AI

Если предположить, что cust - это SQL_Latin1_General_CP1_CI_AI, а order - это другое сопоставление, то приведенный выше запрос решит проблему.

3 голосов
/ 14 июля 2009

Посмотрите в схеме таблицы, что оба поля, в которых вы выполняете объединение, имеют одинаковые параметры сортировки.

ALTER TABLE <table>
ALTER COLUMN <column> VARCHAR(200) COLLATE Latin1_General_CI_AI
GO
2 голосов
/ 14 июля 2009

Если вы создаете временную таблицу и ваши база данных имеет другое сопоставление кроме TempDB (который имеет тот же сопоставление как система - на основе установка), то сравнения / поиски / объединения - может иметь проблемы. Простой трюк, чтобы обойти это использовать database_default:

CREATE TABLE #test2
(
   col1 varchar(12) COLLATE database_default
)
go

Re. Изменение параметров сортировки базы данных и работа с объектами TempDB

Перестроили ли вы все индексы после изменения порядка сортировки Базы данных?

1 голос
/ 14 июля 2009

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

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

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

0 голосов
/ 14 июля 2009

Насколько я помню, если вы используете tempDb в памяти, он воссоздается по мере необходимости. Таким образом, если ваша база данных Model имеет другое сопоставление, новый созданный db (например, tempDb) унаследует его от Model.

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