Компонент скрипта SSIS - получает необработанные данные строки в потоке - PullRequest
2 голосов
/ 18 июня 2019

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

Мой план состоит в том, чтобы загрузить строки в один столбец на SQL-сервере, но во время загрузки я хотел бы проверить каждую строку во время потока данных, чтобы увидеть, имеет ли она правильное количество разделителей, и добавить производную значение столбца для хранения результата этого сравнения.

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

РЕШЕНИЕ:

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

Вместо этого я использовал следующее выражение:

LEN(EntireRow) - LEN(REPLACE(EntireRow, "|", ""))

Это приводит к правильному количеству разделителей в строке, независимо от того, есть ли значение в данном поле или нет.

1 Ответ

2 голосов
/ 18 июня 2019

Я предлагаю использовать Derrived Column для выполнения теста

, а затем добавить Условное разбиение , чтобы решить, хотите ли вы вставить строки или нет.

Примерно так:

Dataflow

Используйте функцию TokenCount в поле Derrived Column, чтобы получить количество столбцов, подобных этому: TOKENCOUNT (FullRow, "|")

Derrived column

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