Как правильно создать команду подбора в T-SQL?

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

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

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

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

Привет, Мэтт


person Bob Tway    schedule 11.04.2011    source источник
comment
Не могли бы вы опубликовать весь запрос? Там может быть что-то, что вы принимаете как должное.   -  person Bobby B    schedule 11.04.2011


Ответы (2)


Попробуйте также поставить 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.
person p.campbell    schedule 11.04.2011
comment
Привет. Спасибо за попытку помочь. Попытка сделать это приводит к ошибке: Не удается разрешить конфликт сортировки между SQL_Latin1_General_CP1_CI_AS и Latin1_General_CI_AS в операции «равно». - person Bob Tway; 12.04.2011

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

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

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

В разделе «Параметры сервера» установите «Использовать удаленную сортировку» на «False» и «Имя сортировки» на «Latin1_General_CI_AS».

person Bob Tway    schedule 12.04.2011