Я обрабатываю плоский файл в службах SSIS, и одно из требований заключается в том, что если в данной строке содержится неправильное количество разделителей, произойдет сбой строки, но продолжится обработка файла.
Мой план состоит в том, чтобы загрузить строки в один столбец на SQL-сервере, но во время загрузки я хотел бы проверить каждую строку во время потока данных, чтобы увидеть, имеет ли она правильное количество разделителей, и добавить производную значение столбца для хранения результата этого сравнения.
Думаю, я мог бы сделать это с помощью компонента задачи скрипта, но мне интересно, если бы кто-то делал это раньше и какой метод был бы лучшим? Если бы подходил компонент задачи сценария, как мне получить доступ к необработанной строке с ее разделителями внутри задачи сценария?
РЕШЕНИЕ:
Я закончил с измененной версией ответа Холдера, поскольку обнаружил, что TOKENCOUNT () не будет считать нулевые значения для этого SO ответа . Если два разделителя не разделены значением, это приведет к неправильному счету (по крайней мере, для моих целей).
Вместо этого я использовал следующее выражение:
LEN(EntireRow) - LEN(REPLACE(EntireRow, "|", ""))
Это приводит к правильному количеству разделителей в строке, независимо от того, есть ли значение в данном поле или нет.