конфликт сопоставления SQL Server - PullRequest
7 голосов
/ 16 декабря 2011

Когда я выполняю SQL-запрос, иногда я получаю следующее сообщение об ошибке:

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

Я часто решаю эту проблему, просто сопоставляя обе таблицы.поэтому мне нужно знать, есть ли какой-нибудь быстрый способ исправить эту проблему.

Я бы хотел добавить что-то особенное в мой SQL-запрос в результате, если параметры сортировки для обеих таблиц не одинаковыв sql запросе также запрос будет работать без ошибок.есть ли решение?

Ответы [ 3 ]

13 голосов
/ 16 декабря 2011

Вы можете принудительно установить сопоставление, используя предложение COLLATE .

т.е.

SELECT *
FROM Table1 T1
INNER JOIN Server2.dbo.Table2 T2
ON T1.Name = T2.Name COLLATE database_default

Конфликты сопоставления распространены при объединении таблиц между двумя базами данных или серверами, особенно если версия БД отличается.

2 голосов
/ 16 декабря 2011

Вы можете указать параметры сортировки в запросе, используя предложение collate :

where  col1 = col2 collate Latin1_General_CI_AS
0 голосов
/ 21 октября 2016

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

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

  2. Используйте ключевое слово COLLATE DATABASE_DEFAULT при сопоставлении столбцов / полей

подобно:

SELECT T1.EmployeeName, T2.DeptName
FROM ServerA.dbo.EmpTab T1
JOIN ServerB.dbo.DeptTab T2
ON T1.DeptCode COLLATE DATABASE_DEFAULT
= T2.DeptCode COLLATE DATABASE_DEFAULT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...