Как импортировать файл CSV переменной длины, используя SSIS? - PullRequest
4 голосов
/ 18 сентября 2008

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

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

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

Ответы [ 5 ]

4 голосов
/ 24 сентября 2008

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

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

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

1 голос
/ 15 марта 2012

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

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

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

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

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

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

1 голос
/ 21 мая 2009

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

1 голос
/ 21 сентября 2008

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

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

0 голосов
/ 18 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...