Как завершить работу компонента SSIS на недопустимых строках - PullRequest
1 голос
/ 16 августа 2011

Я хочу иметь возможность сделать следующее:

  • Импорт строки плоского файла по строке
  • Выполнить условное разбиение значения столбца каждой строки
  • если я обнаружу правильное значение, я хочу продолжить с этой строки
  • , если в любом случае я обнаружу невозможное значение, я хочу ОТКЛЮЧИТЬ компонент, поэтому рабочий процесс останавливается, и я получаю ошибку

Пример: у меня есть файл с тремя столбцами («тип», «значение», «сообщение»)

Я хочу импортировать этот файл строка за строкой, используя назначение плоского файла.Тогда я хочу сделать условный сплит.Если столбец «type» имеет значение «1», я хочу записать эту строку в мое назначение.Если тип "2" или "3", я хочу игнорировать их.Однако, если его "A" или "0", я хочу, чтобы компонент FAIL.

У меня есть все, кроме части "FAIL".Я настроил вывод для последнего условия («столбец не 1,2 или 3») как «Компонент сбоя», однако на самом деле он не дает сбоя компоненту.

Ответы [ 2 ]

7 голосов
/ 16 августа 2011

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

внутри компонента сценария добавьте

    bool pbCancel = false;
    this.ComponentMetaData.FireError(100, "Script Component", "Data Error <type message here>", "", 0, out pbCancel);

Сам компонент скрипта будет выполнен успешно, но задача потока данных не будет выполнена и должна привести к сбою пакета

0 голосов
/ 06 июня 2016

Я бы просто добавил кое-что, что я искал некоторое время и, наконец, нашел один ...

Как сказал Дэрил, если вы просто используете метод ComponentMetaData.FireError(), вы увидите ошибки в результате выполненияно компонент сценария не выйдет из строя.Задача потока данных потерпит неудачу, но только в конце, после выполнения работы (возможно, после некоторой INSERT и / или UPDATE).Если вы хотите полностью остановить выполнение потока данных, вы можете сделать это следующим образом:

  • Создать условное разбиение в состоянии сбоя с 2 выходами:
    1. Строки OK
    2. Строки, которые не удовлетворяют условию
  • На втором выходе запустите сценарий, который выдает ошибку с сообщением очистки для каждой строки.Компонент сценария должен быть преобразованием, а не местом назначения, чтобы иметь вывод.
  • После компонента сценария добавьте команду OLE DB , которая вызывает ошибку SQLна базе назначения: RAISERROR(N'At least one line not configured have been found',16,1)
  • Наконец, после команды OLE DB используйте компонент Объединить все , чтобы соединить 1-й выход условного разбиения (строка OK) с выходомКоманда OLE DB.

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

...