| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Проблемы с collation |
| Автор: Lunatikus 8.11.2007, 16:16 | ||
При переносе клиента с тестового компьютера вне сети в реальную сеть и на релаьный сервер, при создании ##таблицы и попытке записать туда данные выдается ошибка невозможности приведения типов collation. Как пр исоздании таблицы явно указать collation?
пожалуйста,помогите,я в ступоре http://technet.microsoft.com/ru-ru/library/ms184391.aspx |
| Автор: Servena 8.11.2007, 16:28 | ||
Попробуй это сделать при создании БД:
Ссылка на все названия в МСДН: ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.SQL.v2005.en/ssmprog3/html/eee6bae6-0c15-4959-9cd8-c8fe7c440bf0.htm |
| Автор: Lunatikus 8.11.2007, 16:45 |
| база создана и заполнена, у нее есть свой коллэйт,вот под него мне надо подстроить свою временную таблицу. |
| Автор: Servena 8.11.2007, 16:54 | ||
| А если попробовать создать БД с твоей таблицей с такой же Коллейт что и в той БД куда ты будешь переносить? А потом уже перенести. Или изменить коллейт у себя
а потом перенести таблицу? |
| Автор: Lunatikus 8.11.2007, 17:02 |
| у меня ошибка вылетате только при создании временной глобальной таблицы, в которую я переношу данные выборкой из базы base1 у нее есть известный коллейт(при простых выборках и инсертах в базу никаких проблем).При создании временной таблицы я указываю текстовым полям COLLATE database_default. И все равно пр ипопытке инсерта выборки данных из этой же базы base1 происходит конфликт по collate... =(((( |
| Автор: SergKO 8.11.2007, 20:09 |
| tempdb, в которой создается временная таблица имеет другую схему сопоставления, чем Ваша БД. А tempdb имеет схему сопоставления сервера. Выход единственный - переустановка SQL сервера с указанием требуемой схемы сопоставления. Вроде, есть утилита, которая изменяет collation, но, по сути, она неявно переустанавливает сервер. Хотя, есть вариант, явно указывать collation при вставке, но, по-моему, это не стоит делать. |
| Автор: Lunatikus 9.11.2007, 09:15 | ||
| я решил проверить, что будет если я не буду делать временную таблицу ,А просто сделаю запрос на выборку того,что надо вставлять в нее. В ней несколько left join'ов. Результат-та же ошибка конфликта collation...т.е. проблема не в ##таблице. Или при конструкции ADOQuery.open все равно создается временная таблица? К тому же парадокс в том,что в этом запросе используются все таблицы одной базы и у меня еще полно запросов, которые спокойно выполняются с таблицами из этой же базы. Вот,на всякий случай приведу конфликтный запрос(на тестовом отдельном компе-сервере он выполнялся без проблем):
|
| Автор: Servena 9.11.2007, 09:28 |
| Как это можно воспроизвести? А если все разбить на части: т.е. оставить СЕЛЕКТ * и джоины? Нужно как то локализовать ошибку, ато так и не понятно при какой операции она возникает? Или без языка программирования в СКЛ менеджере? |
| Автор: Lunatikus 9.11.2007, 09:28 |
| SergKO, у меня сервер и все базы на нем,судя по параметрам, имеют один тип collation Добавлено через 2 минуты и 7 секунд Servena, да ,ты прав, локализовать надо. Без джойнов ошибки нет. Она появляется при первом слиянии. Но мне это ни о чем не говорит =( синтаксически то все верно. |
| Автор: Lunatikus 9.11.2007, 09:56 |
| прошу прощенья,ошибся. Ошибка возникает при слияние с sp_artc_H002 |
| Автор: Servena 9.11.2007, 10:09 |
| А к твоему серверу можно через СКЛ менеджер подключиться с вне? |
| Автор: Lunatikus 9.11.2007, 10:17 |
| у меня нет сервера,у меня есть только доступ к нему через учетку + я не могу поставить у себя на компе менеджер =( могу только через свою учетку с помощью проги. Блин,я вообще даже не представляю,в каком место МОЖЕТ БЫТЬ проблема с коллэйтом =( может, это изза того что все слияния , начиная со второго идут через сравнение данных не основного набора и сливаемого а первого подливаемого(univer) и нового подливаемого? |
| Автор: Servena 9.11.2007, 10:18 |
| А вообще, ты пробовал выполнить этот запрос с СКЛ менеджера? |
| Автор: Lunatikus 9.11.2007, 10:19 |
| проверил,нет,не изза этого Добавлено через 33 секунды Servena, да,все запросы на тестовом компе проверял в менеджере. |
| Автор: boevik 9.11.2007, 10:20 | ||||
У каких то из этих полей
collate не совпадате. Скорее всего у слова ''НЕТ''. Можно использовать следующий синтакс:
|
| Автор: Servena 9.11.2007, 10:21 |
| Нет, через СКЛ менеджер удаленно в реальной сети? |
| Автор: Lunatikus 9.11.2007, 10:30 | ||
| boevik, может быть, сейчас проверю. Кстати, проверил все джойны,ошибка возникает кроме sp_artc_H002 еще при слиянии с scl_move_H002. Добавлено через 33 секунды Servena, нет,у меня нет такой возможности и не будет =/ админ не позволяет. Добавлено через 4 минуты и 25 секунд boevik, увы, такой запрос тоже выдает ошибку конфликта =( Добавлено через 6 минут и 53 секунды во, а если
работает!нука...сейчас проверю остальное... |
| Автор: boevik 9.11.2007, 11:12 |
| Ошибка collate может вылететь на любом сравнивании стринговых полей. Поэтому надо или быть уверенным в том что все поля одного коллейта или явно приводить к общему collate в запросе. |
| Автор: Lunatikus 9.11.2007, 11:51 |
| все,теперь разобрался и везде при сравнении ставил явное задание дефолтов.Спасибо большое, выручили! |