0

Не удаётся разрешить конфликт сопоставления

17

Описание проблемы:

Я перенёс одну из наших баз данных (DB1) с SQL Server 2008 на 2012, и при выполнении хранимых процедур получаю следующую ошибку:

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

Я изменил сортировку базы данных, используя следующие команды:

ALTER DATABASE [optimiser] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [optimiser] COLLATE SQL_Latin1_General_CP1_CI_AS;
ALTER DATABASE [optimiser] SET MULTI_USER;

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

Есть ли способ разрешить эту проблему? На старом сервере DB1 была установлена сортировка Latin1_General_CI_AS, и всё работало исправно. Новое местоположение базы данных имеет сортировку по умолчанию SQL_Latin1_General_CP1_CI_AS. Есть ли смысл менять сортировку базы данных DB1 на новом сервере обратно на Latin1_General_CI_AS?

1 ответ(ов)

0

У вас есть несоответствие двух различных сортировок в вашей таблице. Чтобы узнать, какие сортировки используются в ваших столбцах, выполните следующий запрос:

SELECT
    col.name, col.collation_name
FROM 
    sys.columns col
WHERE
    object_id = OBJECT_ID('YourTableName')

Для разрешения проблемы выполните следующий запрос:

ALTER TABLE YourTableName 
ALTER COLUMN OffendingColumn VARCHAR(100) COLLATE Latin1_General_CI_AS NOT NULL

Не забудьте заменить YourTableName и OffendingColumn на название вашей таблицы и соответствующего столбца. Это приведёт к изменению сортировки столбца на указанную.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь