Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Cannot resolve collation conflict for equal to... (число прочтений - 5006 )
GvH
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 7
Зарегистрирован: 06. Декабря 2006
Cannot resolve collation conflict for equal to...
06. Декабря 2006 :: 09:05
Печать  
Добрый день!

Дано:
SQL база с кодировкой Cyrillic_General_CI_AS куда залита 7-рочная база,
а также есть tempdb, а у неё кодировка SQL_Latin1_General_CP1251_CI_AS.

Проблема:
Соответственно когда выполняется запрос на 1С++ выскакивает ошибка см. subj.

Вопрос:
Что делать?  Круглые глаза
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Cannot resolve collation conflict for equal to
Ответ #1 - 14. Декабря 2006 :: 11:19
Печать  
GvH писал(а) 06. Декабря 2006 :: 09:05:
Добрый день!

Дано:
SQL база с кодировкой Cyrillic_General_CI_AS куда залита 7-рочная база,
а также есть tempdb, а у неё кодировка SQL_Latin1_General_CP1251_CI_AS.

Проблема:
Соответственно когда выполняется запрос на 1С++ выскакивает ошибка см. subj.

Вопрос:
Что делать?  Круглые глаза


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

К сожалению, в многогиговых базах не катит.
В такой ситуации я в свое время долго пытался штатно сменить кодировку базы. Не помогло. То есть, помогло, но не везде - глюки все равно сыпались.
В итоге плюнул и поставил второй instance SQLя с требуемой кодировкой.

  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Cannot resolve collation conflict for equal to
Ответ #2 - 14. Декабря 2006 :: 12:43
Печать  
GvH писал(а) 06. Декабря 2006 :: 09:05:
Добрый день!

Дано:
SQL база с кодировкой Cyrillic_General_CI_AS куда залита 7-рочная база,
а также есть tempdb, а у неё кодировка SQL_Latin1_General_CP1251_CI_AS.

Проблема:
Соответственно когда выполняется запрос на 1С++ выскакивает ошибка см. subj.

Вопрос:
Что делать?  Круглые глаза

1."7-рочная база" - что имелось в виду, версия 1С или версия MSSQL?
2.Проблема только с запросами ODBCRecordset? Сама 1С работает нормально?
  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Cannot resolve collation conflict for equal to
Ответ #3 - 14. Декабря 2006 :: 13:22
Печать  
DmitrO писал(а) 14. Декабря 2006 :: 12:43:
......



В описанной ситуации ошибка возникает во всех случаях, когда запрос использует в условии табличку из tempdb - наступал на эти грабли неоднократно по мере унификации "диких" 1с-овских баз в филиалах.

Это может быть и 1срр "....where ID in (select val from #qwerty)"
и родной 1Совский запрос "Условие (Клиент в выбклиент)"

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

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Cannot resolve collation conflict for equal to
Ответ #4 - 14. Декабря 2006 :: 13:33
Печать  
Ну, вообще-то, кодировку можно приводить прямо в выражении.
Цитата из BOL:
SELECT *
FROM TestTab
WHERE GreekCol = LatinCol COLLATE greek_ci_as
Вот я и задал вопросы, для того чтобы разобраться, может это не 1С-ная база и запросы к ней пишутся полностью свои.
« Последняя редакция: 14. Декабря 2006 :: 15:17 - DmitrO »  
Наверх
ICQ  
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Cannot resolve collation conflict for equal to
Ответ #5 - 14. Декабря 2006 :: 13:37
Печать  
Была та же проблема, решилась сменой Collation у базы через ALTER DATABASE + сменой Collation у всех символьных реквизитов (char и text) всех таблиц через EM->Tables->Design Table, там внизу есть стока - Collation и его можно поменять
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Cannot resolve collation conflict for equal to
Ответ #6 - 14. Декабря 2006 :: 14:29
Печать  
pavel_tr писал(а) 14. Декабря 2006 :: 13:37:
Была та же проблема, решилась сменой Collation у базы через ALTER DATABASE + сменой Collation у всех символьных реквизитов (char и text) всех таблиц через EM->Tables->Design Table, там внизу есть стока - Collation и его можно поменять


Ну, вот я тоже однажды так пытался. На каждый чих после этого ругаться перестала.
Но, видимо, чего-то я пропустил, поскольку все равно глючило (см.выше)
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Cannot resolve collation conflict for equal to
Ответ #7 - 15. Декабря 2006 :: 07:06
Печать  
Единственное, ещё потом пришлось базу шринкануть т.к. после ALTER DATABASE вместо 20 Гб стала 50, места много сожрала. А раз глюки остались - видимо, просто не по всем полям прошёлся. Я скрипт какой-то даже находил, который удалял индексы и менял Collation у соответствующих реквизитов, но с ним ничего не вышло, пришлось ручками. Благо у нас база самописная, 10 справочников, 14 доков, 5 регистров. За полтора часа справился
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать