Проблема с collation conflict при union операциях

Князев Константин
Дата: 09.10.2003 17:27:13
Делаю запрос к двум слинкованным серверам и получаю такую ошибку (см.субж), хотя поля имеют одинаковый collation. Помогите разобраться! Спасибо.
злой шаман
Дата: 09.10.2003 17:58:57
А в каком положении галка "Collation Compatible" в свойствах линкед сервера?
Князев Константин
Дата: 10.10.2003 13:42:23
Галка установлена.
Glory
Дата: 10.10.2003 15:35:38
получаю такую ошибку (см.субж),

Непонятно до конца, какая все-таки ощибка возникает. Если 446, то Collation-ы все таки разные.
Князев Константин
Дата: 10.10.2003 18:25:24
Server: Msg 446, Level 16, State 9, Line 2
Cannot resolve collation conflict for UNION operation.
смотрено-пересмотрено - одинаковые SQL_Latin1_General_CP1251_CI_AS :(
злой шаман
Дата: 10.10.2003 18:43:37
А дефолтовая collation tempdb сервера, на котором запускается запрос такая же?
Князев Константин
Дата: 10.10.2003 18:53:09
на tempdb стоит Cyrillic_General_CI_AS! О чем это говорит? :)
злой шаман
Дата: 10.10.2003 19:03:46
Это говорит о том, что при выполнении запроса сервер складывает промежуточные результаты в темпдб, неявно при этом меняя collation. Попробуйте вместо union сделать за него эту работу, создавая временную табличку с нужным collation и поочередной заливкой в нее данных.
Князев Константин
Дата: 11.10.2003 17:04:37
спасибо!
Sacha_B_
Дата: 14.10.2003 18:58:20
Можно все время "напоминать" серверу с какой collation мы имеем дело, т.е. указывать в операциях
declare @a table (a varchar(10) collate SQL_Latin1_General_CP1251_CI_AS  null,

b varchar(10) collate Cyrillic_General_CI_AS null)
insert into @a select 'a','b'

select a collate Cyrillic_General_CI_AS from @a
select (a collate Cyrillic_General_CI_AS)+b from @a
select a+b collate Cyrillic_General_CI_AS from @a
select a+b collate SQL_Latin1_General_CP1251_CI_AS from @a


или поставьте нужный Вам collation для model - он будет у tempdb после перезапуска сервера