Как правильно создать команду сортировки в T-SQL? - PullRequest
1 голос
/ 11 апреля 2011

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

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

Это ново для меня, но похоже на конфликт кодировки, поэтому я нашел его в Google и обнаружил команду сортировки, которую можно добавить в мое объединение. Однако я попробовал оба

va ON V_ID1 = c1.strData COLLATE Latin1_General_CI_AS

и

va ON V_ID1 = c1.strData COLLATE SQL_Latin1_General_CP1_CI_AS

И ни одна из них не устраняет ошибку. Что я делаю не так?

РЕДАКТИРОВАТЬ: весь запрос слишком велик, чтобы публиковать сообщения и ожидать, что люди его фильтруют, но вот соответствующий бит:

   select
        rel.intParentAttributeId as intItemId,
        case va.type
        when 'SM' then 120000000
        when 'FB' then 110000000
        when 'RO' then 100000000
        when 'SP' then 90000000
        when 'A' then 80000000
        when 'D' then 70000000
        when 'P' then 60000000
        when 'SR' then 50000000
        when 'FN' then 40000000
        when 'RL' then 30000000
        when 'VO' then 20000000
        when 'RE' then 10000000
        end
        +

        rel.intParentAttributeId
        as fltStrength
        from
        AttributeMap ky

        join Catalogue c1 on c1.intRowId=ky.intChildAttributeId and c1.intAttributeTypeId=@intsimilarAtt

        join

        [SQLSERVERNAME].[SchemaName].dbo.VidAssc
         va on V_ID1 COLLATE SQL_Latin1_General_CP1_CI_AS = c1.strData COLLATE SQL_Latin1_General_CP1_CI_AS


        join Catalogue c2 on c2.strData=V_ID2 and c2.intAttributeTypeId=@intsimilarAtt

        join AttributeMap rel on rel.intChildAttributeId = c2.intRowId

        join @tmpSeeds s on s.intItemId = ky.intParentAttributeId

        group by rel.intParentAttributeId,va.Type

        )sqi

Ура, Matt

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

ОК, наконец-то нашел исправление.Вот что вам нужно сделать:

В диспетчере серверов sql перейти к объектам сервера> Связанные серверы> и найти проблемный связанный сервер.

Щелкните правой кнопкой мыши> Свойства

Под серверомВ параметрах «Использовать удаленное сопоставление» для «Ложь» и «Имя сопоставления» установлено значение «Latin1_General_CI_AS»

2 голосов
/ 11 апреля 2011

Попробуйте также поставить COLLATE на левой стороне:

FROM Table1 AS t1
INNER JOIN Table2 AS t2
 ON t1.ID COLLATE Latin1_General_CI_AS
  = t2.ID --COLLATE Latin1_General_CI_AS --optionally on the right if needed.
...