2016-08-03 3 views
-1

Мой исходный файл (|) Текстовый файл с разделителями труб (.txt). Я пытаюсь загрузить файл в SQL Server 2012 с помощью SSIS (SQL Server Data Tools 2012). У меня три столбца. Ниже приведен пример того, как выглядят данные в файле.SSIS Файл с разделителями труб не работает, если в строке больше номера труб, чем номер столбца?

enter image description here

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

Мой вопрос: почему пакет не работает? Я считаю, что он имеет поврежденные данные, потому что у него больше столбцов, если мы идем по разделителю? Если я хочу скомпрометировать пакет, какие у меня параметры, если число разделителей больше, чем число столбцов?

enter image description here

+0

Пакет работает по назначению. Он просто предполагает, что все прошлое первого канала является частью данных для этого столбца. Вы можете сворачивать двойные кавычки данных, чтобы это не происходило. – TTeeple

+0

Источник данных принадлежит внешнему поставщику. стандартным файловым форматом является Pipe (|) Delimited. Есть ли работа, чтобы провалить пакет? – RavikG

ответ

1

Вы можете сказать, что происходит, если вы посмотрите на расширенную страницу менеджера соединений с плоскими файлами. Для всех, кроме последнего поля, разделитель равен '|', для последнего поля - CRLF.

Таким образом, все данные после последней определенной трубы и конца строки (CRLF) импортируются в ваше последнее поле.

Что бы я сделал, это добавить еще один столбец диспетчеру соединений и вашей промежуточной таблице. Сопоставьте новую «TestColumn» в пункте назначения. Когда импорт завершен, вы хотите, чтобы этот столбец был нулевым в каждой строке. Если нет, то выдайте ошибку.

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

Рекомендация для проверки на нуль будет заключаться в использовании задачи выполнения sql с единичным результатом, полученным с целым числом. Если значение равно> 0, то сбой пакета.

Запрос будет выбрать Count (*) NotNullCount From Table Где TestColumn не является нулевым.

0

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

+0

У вас есть образец сценария для этого? это было бы полезно. – RavikG

+0

Нет. У меня нет никаких скриптов подсчета труб, извините. –