Вы можете использовать вывод ошибок источника плоских файлов, чтобы перенаправить неверные строки в другой плоский файл и вручную исправить значения, пока будут обрабатываться все допустимые строки.
В Интернете много ссылок, чтобы узнать больше об источнике плоских файловВывод ошибки:
Обновление 1 - Временное решение с использованием компонента сценария и условного разбиения
сВывод ошибки плоского файла не работает, вы можете использовать компонент сценария с условным разбиением для фильтрации плохих строк. Следующее обновление является пошаговым руководством для реализации этого:
- Добавление диспетчера соединений с плоскими файлами, Перейдите на вкладку «Дополнительно», удалите все столбцы, кроме одного, и измените его длину на 4000
Добавьте компонент сценария, перейдите на вкладку «Входные и выходные столбцы», добавьте нужные выходные столбцы (в этом примере 4 столбца) и добавьте столбец флага типа
DT_BOOL
Внутри компонента сценария напишите следующеескрипт для проверки, если число столбцов равно 4, тогда
Flag
=
True
, что означает, что это допустимая строка, иначе установите
Flag
как
False
, что означает, что это неверная строка:
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (!Row.Column0_IsNull && !String.IsNullOrWhiteSpace(Row.Column0))
{
string[] cells = Row.Column0.Split(new string[] { "\",\"" }, StringSplitOptions.None);
if (cells.Length == 4)
{
Row.Col1 = cells[0].TrimStart('\"');
Row.Col2 = cells[1];
Row.Col3 = cells[2];
Row.Col4 = cells[3].TrimEnd('\"');
Row.Flag = true;
}
else
{
bool cancel;
Row.Flag = false;
}
}
else
{
Row.Col1_IsNull = true;
Row.Col2_IsNull = true;
Row.Col3_IsNull = true;
Row.Col4_IsNull = true;
Row.Flag = true;
}
}
}
Добавить условное разбиение для разделения строк на основе
Flag
столбец
Сопоставьте вывод действительных рядов с назначением OLEDB, а вывод плохих рядов - с другим плоским файлом, в котором отображается только
Column0