Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Перечитал все, что нашел на форуме про перекодировку в SSIS. Но рецепты не дают результата.
Имеем ODBC-источник с DOS-текстом 866, БД назначения MS SQL Server 2012. Задача - закачать таблицу средствами SQL Data Tools c SSIS, чтобы в MS SQL таблица была с текстом в win-кодировке 1251. ODBC-драйвер - экзотический и переключения интерпретации кодировки не имеет.
Рисуем простейшую схему (см.вложение)
Советы форума измененить у Destination параметра AlwaysDefaultCodePage на True и определение DefaultCodePage как либо 866, либо 1251 - не имеет эффекта. Но у коллег как-то получалось же перекодировать.
Или единственный выход - использовать промежуточный компонент Data Conversion?

К сообщению приложен файл. Размер - 8Kb
20 июн 12, 22:00    [12749154]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
скрипт компонент используй. можно сразу вместо соурса его использовать
21 июн 12, 12:13    [12751728]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Ivan Durak,
Неожиданное предложение. Идея в том, чтобы в скрипте использовать какую-то функцию преобразования кодировки?
21 июн 12, 15:12    [12753657]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
serg0265
Ivan Durak,
Неожиданное предложение. Идея в том, чтобы в скрипте использовать какую-то функцию преобразования кодировки?

угу
21 июн 12, 15:19    [12753756]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Ivan Durak,
Другие способы, описанные в форуме, для sql 2012 не работают?
21 июн 12, 15:41    [12753989]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
serg0265,

Делаете два DataFlow
В первом со своего ODBC источника выгружаете в текстовый файл, в кодировке 866, с правильными разделителями

Во втором читаете через Flat File Source, с указанием Code Pate 866 (OEM - Russian)
21 июн 12, 16:05    [12754210]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Andrey Sribnyak,
Все интереснее и интереснее.
21 июн 12, 16:31    [12754395]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Andrey Sribnyak,
Спасибо! Ваш способ несложен и работает.

Добавлю только важные уточнения:
прежде чем добавлять и настраивать Destination, поменяйте тип текстовых колонок со 'string' на 'unicode string' для Output Columns в Advanced от Flat File Source. Это позволяет при их последующем связывании создать автоматически те же типы полей в Destination. И затем в Destination надо поставить DefaultCodePage = 1251 и AlwaysDefaultCodePage = True. Т.о. данные должны пройти через тип Unicode (иначе будут ошибки отладки).

Странно, что попытка воспроизвести точно такую же методику для передачи данных напрямую из ODBC Source в Destination НЕ перекодирует символы. Может кто-то знает в чем причина?
21 июн 12, 18:37    [12755289]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
очевидно же - проблема в РИДЕРЕ !!!
автор
ODBC-драйвер - экзотический
21 июн 12, 18:48    [12755334]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Ivan Durak,
Не соглашусь. Драйвер просто обеспечивает поток данных. неважно какой кодировке. Как только он попал в ODBC Source, то на этом зона его "ответственности" заканчивается. Далее дело за интерпретацией со стороны компонент SSIS.

И в связи с этим вот какое обнаружил объяснение своему вопросу. Оказывается, что если у компонента FlatFile возможно для ExternalColumns иметь тип 'string', и одновременно 'unicode string' для этой же колонки в OutputColumns. А вот для ODBC Source такой фокус не проходит.
21 июн 12, 19:03    [12755422]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Ivan Durak,

Вопрос по вашему предложению:
где в скрипт-компоненте определить таблицу и затем ExternalColumns (odbc connection определен)?
21 июн 12, 20:01    [12755688]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
serg0265
Ivan Durak,

Вопрос по вашему предложению:
где в скрипт-компоненте определить таблицу и затем ExternalColumns (odbc connection определен)?

ExternalColumns там же где и везде, в скрипте Output0Buffer.AddRow();
22 июн 12, 13:01    [12759434]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Попробую оживить тему.
При всем моем уважении к Ivan Durak, решение оказалось хлопотно: расписывать все для большого количества колонок и потом менять, когда потребуется.
Andrey Sribnyak, способ выглядит привлекательнее. Но смущает наличие промежуточного файла в схеме и снижение надежности.
Может мои строковые примеры натолкнут еще кого-то на простое решение. Например, при установке на ODBC Source параметра DefaultCodePage = 866 он выдает такую строку
?' ?? ?'?. ?.-?.??%'?':'? ???.":?. ?.??%???-?<? При задании 1251 такую- Ќ’ ЋЉ €‘Џ. Ѓ.-Ђ.ђЂ‰‘Ћ‚…’Ђ ЌЂђ.„…Џ. ѓ.ЃЂ‰ђЂЊ-Ђ‹€
26 июн 12, 12:10    [12775552]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
serg0265,

Может попробовать все хранить не в 1251, а в unicode ? :-)
т.е создаете поля , как nvarchar или nchar

Мне кажется и будет вам счастье
26 июн 12, 12:24    [12775676]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Andrey Sribnyak,
Пробовал и так, и эдак. Загружал в unicod через промежуточный компонент, а потом в MSSQL. Кодировка всегда остается той, какой пришла из ODBC. Какой бы DefaultCodePage я не ставил.
26 июн 12, 14:46    [12776896]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
serg0265
Andrey Sribnyak,
Пробовал и так, и эдак. Загружал в unicod через промежуточный компонент, а потом в MSSQL. Кодировка всегда остается той, какой пришла из ODBC. Какой бы DefaultCodePage я не ставил.


Кстати.. .а Data COnversion c приведением типа к Unicode text stream Не помогает?
26 июн 12, 16:11    [12777623]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Andrey Sribnyak,
Пробовал тоже. Нет. Вот схема и результат при выставленной кодировке в ODBCSource - 866.

К сообщению приложен файл. Размер - 100Kb
26 июн 12, 16:23    [12777734]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
И даже так: последнее преобразование меняет unicode в string 1251.

К сообщению приложен файл. Размер - 113Kb
26 июн 12, 16:35    [12777845]     Ответить | Цитировать Сообщить модератору
 Re: Перекодировка в SSIS  [new]
serg0265
Member

Откуда:
Сообщений: 165
Какая досада, что Миксрософт не предусмотрел для компоненты DerivedColumn наличие доп.функции преобразования кодировок, либо добавление своих! Это бы помогло многим во многих ситуациях.
26 июн 12, 18:58    [12778849]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить