2012-02-29 2 views
0

У меня есть текстовый файл (~ 100 000 + строк), где каждый столбец является фиксированной длиной, и мне нужно получить его в таблице базы данных SQL Server. Каждый из наших клиентов должен получить эти данные, но каждый текстовый файл немного отличается, поэтому нам нужно вручную войти и отрегулировать интервал символов в хранимой процедуре SQL.Файл с фиксированной длиной текста в таблицу данных SQL

Мне было интересно, есть ли способ использовать XML/XSD/XSLT. Таким образом, мне не нужно будет вводить и вручную редактировать хранимые процедуры.

Что мы делаем в настоящее время это:

1.) SQL server stored procedure reads a text file from the disk 
2.) Each record is split into an XML element and dumped into a temporary table 
3.) Using SQL Server's string manipulation, each element is parsed 
4.) Each column is dumped into 

Для пояснения, вот несколько примеров ... текстовый файл

Один клиента будет иметь следующее:

Name [12 Characters] 
Employer [20 Characters] 
Income [7 Characters] 
Year-Qtr [5 Characters] 

JIM JONES HOMERS HOUSE OF HOSE100000 20113 

Текстовый файл другого клиента будет иметь следующее:

Year-Qtr [5 Characters] 
Income [7 Characters] 
Name [12 Characters] 
Employer [20 Characters] 

20113100000 JIM JONES HOMERS HOUSE OF HOSE 

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

+1

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

+0

Я не уверен, что это сработает, но вы заглянули в команду «BULK INSERT»? http://msdn.microsoft.com/en-us/library/aa225968%28v=sql.80%29.aspx –

+0

Раньше мы использовали BULK INSERT, но требовали кучу разрешений, которые иногда пропускались, когда ИТ решил переместить базы данных, файлы и папки. – Jim

ответ

0

Использование функций обработки XML xml для импорта текстового файла с фиксированной длиной выглядит как обратный способ делать вещи (без обид).

Вам не нужно создавать собственное приложение, Microsoft уже построила для вас. Это гениально называется BCP Utility. При необходимости вы можете создать format file, который сообщает BCP Utility, как импортировать ваши данные. Лучшая часть - это смехотворно быстро, и вы можете импортировать данные на SQL Server с удаленного компьютера (так как в файле не нужно размещать его в поле SQL Server для его импорта)

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

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

0

Excel, Access, все варианты VB и C# имеют простые в использовании драйверы для обработки текстовых файлов в виде таблиц виртуальной базы данных, обычно с помощью визуальных средств для сопоставления столбцов. И чтение и запись на SQL Server - это, конечно, торт. Я бы начал там.

100K строк не должно быть проблемой, если, возможно, вы делаете это ежечасно для нескольких клиентов.

+0

Не могли бы вы привести мне пример такого драйвера? – Jim

+0

Вот целая бестиария из них, от ODBC до LINQ. Объедините любые аббревиатуры с типом источника и целевым назначением, и Google должен быть вашим другом. http://devblog.virtage.com/2009/02/microsoft-database-technologies-babylon-odbc-ole-db-ado-jet-isam-mdac-linq/ – dkretz

0

Я встретил File Helpers некоторое время назад, когда искал парсер CSV. В примере, который я привел, показано, как вы можете использовать базовые POCO, украшенные атрибутами, для представления файла, который вы пытаетесь проанализировать. Поэтому для анализа их файлов вам понадобится клиентский POCO.

Я не пробовал это сам, но это может стоить того.

Смежные вопросы