2014-11-11 2 views
2

Я работаю над пакетом SSIS в VS 2010 для экземпляра 2012 года. Я импортирую плоские файлы у поставщика, который не будет чистить свои данные. Я не могу выйти за рамки «Flat File Source», потому что данные настолько искажены, что они зависают и не будут продолжать синтаксический анализ.Недействительные данные приводят к повреждению плоского файла SSIS для зависания

Вот пример хороших данных с заголовками:

EventID|AccountID|ListID|ID|Date 
1|3000|20030|1092997696|10-Nov-2014 09:36:13 

Вот плохие данные, которые (и) будет/ИНГ захвачена обработки ошибок:

1|3000|20030|1092997696;ҧ��DAVNJ��|11-Nov-2014 06:40:28 

Вот данные, висит мой пакет:

1|3000|20030|1092997696ci[ 
a5��~[�t:RW�uXXïA,u��ïn��I� �JA!QXQ|11-Nov-2014 08:27:27 

Как с этим справиться? Помните, что я не могу выйти за рамки простого анализа синтаксиса файла, чтобы использовать производную задачу column/conditional split/script.

Спасибо заранее! Kirsten

+0

Кажется, у вас есть возврат каретки. Библиотека синтаксического анализа SSIS остановится в этой строке и сообщит, что у вас короткая строка. – billinkc

+1

В таком случае я был бы склонен писать препроцессор файла в «технологии по вашему выбору», чтобы перевести плохие файлы в то, что SSIS не собирается запугать. Я знаю, двойная обработка, в чем смысл использования инструмента, если он не может этого сделать, и т. Д. И т. Д. Я просто пытаюсь предложить подход, основанный на ограничениях. – billinkc

+1

Согласен с billinkc. Чтобы сделать рекомендацию о том, как сделать предварительную обработку, нам нужно знать немного больше об ограничениях. Существуют ли какие-либо правила, которые гарантированы, даже если данные плохие? Например, будут ли трубы отображаться только как разделители и всегда появляться, когда они должны? Если это так, вы, вероятно, можете легко очистить файл с помощью задачи сценария C#/VB. –

ответ

2

Выяснено, как получить данные, чтобы я мог его очистить!

CREATE TABLE dbo.crap_data_varcharmax(
    DataBlob NVARCHAR(MAX)); 

BULK INSERT dbo.crap_data_varcharmax 
FROM '\\SQLSERVERNAME01\e$\Folder\FileName.txt' WITH (ROWTERMINATOR = '\n', FIELDTERMINATOR = '|', FIRSTROW = 2); 

SELECT * 
FROM dbo.crap_data_varcharmax; 
Смежные вопросы