2011-12-19 3 views
1

Используя SQL 2008 R2, я создал пакет SSIS, который копирует плоский файл и импортирует его в таблицу SQL.Регистрация/отправка по электронной почте пропущенных записей в пакете SSIS

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

Here's the data file structure: 
123|ABC|Y|Y 
784 
456|DEF|Y|Y 
789|GHI|Y|N 
812||Y|N 
... 

Таким образом, в этом случае, я хотел бы, чтобы первый, третий и четвёртую запись для импорта, а вторая и пятая запись будет пропущена и по электронной почте.

Я попытался тестирование это как есть, и так как он ищет разделитель трубы, он считывает вторую линию вместе с третьим, как:

784456|DEF|Y|Y 

Я около 3 дней работы с SSIS, поэтому, если кто-то может помочь мне в решении этой задачи, я был бы благодарен.

ответ

0

Насколько велики файлы? Один из способов - использовать промежуточную таблицу. НЕ временная таблица. Столбец-таблица - физическая таблица, которая сохраняет свое существование в базе данных. Вы даете все записи там, затем вставляете хорошие данные в производственную/основную таблицу, а затем экспортируете плохие строки в файл, который вы можете добавить в задачу sendmail.

(тогда вы можете обрезать промежуточную таблицу для следующий интервал/пробел/цикл/файл)

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

+0

Файлы 40k строк ... Я думаю, что моя проблема была в том, как я сортировать хорошее от плохого ... – tjans

0

Поскольку он объединяет вторую строку с третьим, это звучит так, как либо разделитель строк неверен в строке 3, либо неправильно установлен в диспетчере соединений. Я бы посмотрел файл в Notepad ++ (или текстовый редактор, который будет отображать скрытые символы, такие как Cr и Lf), и убедитесь, что разделитель строк согласован для каждой строки и соответствует ему, что было установлено в диспетчере соединений ,

После устранения проблемы с разделителями строк вы можете отделить ошибочные записи с условным разделением. Под условием введите [YourColumnName] == "" и в поле Output name введите Error. Назовите название вывода по умолчанию «Правильно». Теперь сопоставьте вывод «Корректный» с вашей таблицей и сопоставьте вывод «Ошибка» с плоским файлом, компонентом сценария, таблицей или любым другим форматом, к которому вы хотите обратиться.

+0

Ну, линии устанавливаются, где каждое поле имеет свой разделитель установлен на | и последнее поле установлено в Lf. Таким образом, имеет смысл, почему он объединяет их, потому что, если он не находит трубку, он продолжает поиск, пока это не произойдет. Что касается вашего решения, я рассмотрю это условное расщепление в течение недели и посмотрю, смогу ли я это понять. Я, возможно, не доберусь до этого до праздников, но я отвечу на ваш ответ, если я получу его после праздников, и это сработает ... – tjans

+0

Он по-прежнему выглядит как плоский файл. Он объединяет строки, потому что не находит разделитель строк. Если Lf был в конце строки 3, он узнал бы, что строка была завершена и запустила новую. Я настоятельно рекомендую вам загрузить Notepad ++ и подтвердить здесь: http://notepad-plus-plus.org/download/v5.9.6.2.html. В противном случае вы можете преследовать свой «хвост». – brian

Смежные вопросы