2008-09-18 5 views
4

Кто-нибудь смог получить текстовый файл с переменной длиной записи (CSV) в SQL Server через SSIS?Как импортировать CSV-файл переменной длины записи с помощью SSIS?

Я пробовал много раз, чтобы получить CSV-файл в таблице SQL Server, используя SSIS, где входной файл имеет различную длину записи. По этому вопросу две разные длины записи составляют 63 и 326 байт. Все длины записей будут импортированы в ту же таблицу ширины 326 байтов.

Импорт более 1 миллиона записей.
У меня нет контроля над созданием файла импорта.
Я должен использовать SSIS.
Я подтвердил с MS, что это было сообщено как ошибка. Я пробовал несколько обходных решений. Большинство из них были там, где я пытаюсь написать собственный код, чтобы перехватить запись, и я не могу заставить его работать так, как я хочу.

+0

Я думаю, что это была проблема с DTS/SQL Server 2000. Мне было больно, что они не исправили это. Кривая обучения, как она есть, крута для меня! – 2008-10-05 03:05:55

+0

Я использовал BULK Import с небольшим программированием, чтобы установить файлы, и он обеспечил мне такую ​​же скорость, что и пакет SSIS, но и больше контроля над импортом. – Gripsoft 2008-09-18 10:39:37

ответ

4

У меня была аналогичная проблема, и я использовал специальный код (задача скрипта) и компонент скрипта на вкладке «Поток данных».

У меня есть файл с плоским файлом, который подается в компонент скрипта. Внутри я использую код для манипулирования входящими данными и исправления для адресата.

Моя проблема заключалась в том, что провайдер использовал '000000', поскольку даты не доступны, а другой coloumn имел проблему заполнения/обрезки.

0

Почему вы не можете просто импортировать его в качестве тестового файла и установить разделитель столбцов на «,» и разделитель строк на CRLF?

+0

В основном, когда вы сталкиваетесь с короткой записью в файле импорта, SSIS продолжает импортировать в текущую строку таблицы SQL Server. СЛЕДУЕТ начать импорт этого самого следующего байта файла в новой строке таблицы. Он полностью искажает данные. Даже сам CRLF импортируется! – Taptronic 2008-09-18 10:33:04

1

У вас не возникло проблем с импортом этого файла. Просто убедитесь, что при создании диспетчера соединений с плоским файлом выберите Формат с разделителем, затем установите длину столбца SSIS в максимальную длину столбца файла, чтобы он мог размещать любые данные.

Похоже, вы используете формат фиксированной ширины, что неверно для CSV-файлов (поскольку у вас есть столбец переменной длины), или, возможно, вы неправильно настроили разделитель столбцов.

+0

Я выбрал Delimited и задал длину до максимальной длины записи - не повезло. Мне пришлось отказаться от него и написать собственный код импорта, используя C#, обрабатывая запись по записи. – Taptronic 2009-05-24 13:57:11

1

Такая же проблема. В моем случае целевой CSV-файл имеет заголовок & записи нижнего колонтитула с форматами, полностью отличными от тела файла; верхний/нижний колонтитул используются для проверки полноты обработки файлов (дата/время, количество записей, сумма суммы - «контрольная сумма» любым другим именем ...). Это общий формат для файлов из сред «мэйнфреймов», и, хотя я еще не начал его использовать, я ожидаю, что придется использовать сценарии, чтобы отключить верхний/нижний колонтитул, сохранить остальные как новый файл, обработать новый файл, а затем выполните проверку. Не может точно ожидать, что MS будет иметь это из коробки (но это было бы неплохо, не так ли?).

0

Вы можете написать задачу скрипта, используя C#, чтобы перебирать каждую строку и набивать ее соответствующим количеством запятых, чтобы выгрузить данные. Это предполагает, конечно, что все данные выравниваются с соответствующими столбцами.

I.e. когда вы читаете каждую запись, вы можете «подсчитать» количество запятых. Затем просто добавьте X число запятых в конец записи, пока оно не будет иметь правильное количество запятых.

В Excel возникла проблема, вызывающая создание такого типа файла при преобразовании в CSV.

Если вы можете сделать это «вручную», то лучшим способом решить этот вопрос является открытие файла в Excel, создание столбца в конце записи и заполнение его до конца с помощью 1 s или некоторый другой характер.

Nasty, но может быть быстрым решением.

Если у вас нет возможности сделать это, вы можете сделать то же самое программно, как описано выше.