SQL Server 2000 DTS - не удается разрешить конфликт сопоставления для равной операции
У меня есть пакет SQL Server 2000 DTS.
Один из шагов этого пакета имеет следующий SQL:
SELECT *
FROM [Crocus_Limited$OrderRequestDetail]
WHERE (rep_updated > GETDATE() -2)
AND NOT EXISTS
(SELECT OrderID
FROM NavisionUpgrade.navision4.dbo.[WEBOrderDetails] rd
WHERE rd.OrderID = [Crocus_Limited$OrderRequestDetail].OrderID
AND rd.NavisionItemNo = [Crocus_Limited$OrderRequestDetail].NavisionItemNo )
Это терпит неудачу - дает мне ошибку: не может разрешить конфликт сопоставления для равной операции.
Этот DTS в основном перемещает данные из одной БД в другую (расположенную в разных географических точках)
Как я могу изменить вышеупомянутый запрос, чтобы решить эту проблему?
2 ответа
Один или оба столбца соединения имеют один из типов данных char (char,nchar,varchar,nvarchar), которые хранятся в несовместимых сопоставлениях в каждой базе данных.
Вы можете указать параметры сортировки для сравнения строк. Самый простой способ сделать это - указать параметры сортировки по умолчанию для машины, на которой выполняется запрос (я предполагаю, что NavisionItemNo
это столбец проблемы):
...AND rd.NavisionItemNo collate database_default = [Crocus_Limited$OrderRequestDetail].NavisionItemNo collate database_default )
РЕДАКТИРОВАТЬ
OrderID также является столбцом varchar? Если так, попробуйте
...WHERE rd.OrderID collate database_default = [Crocus_Limited$OrderRequestDetail].OrderID collate database_default
AND rd.NavisionItemNo collate database_default = [Crocus_Limited$OrderRequestDetail].NavisionItemNo ) collate database_default
Как упоминалось в двух предыдущих постах, вы должны использовать атрибут collate для каждого нечислового столбца, но посмотрите на сопоставление целевого db и используйте это сопоставление (например, SQL_Latin_CI_AS). Имейте в виду, что таблица может иметь свое собственное сопоставление, даже столбец может иметь другое сопоставление, поэтому внимательно изучите ваши определения.
Мир и удача Лед