2013-11-20 5 views
0

Я пытаюсь импортировать текстовый файл в таблицу с дополнительными полями, которые мне нужно заполнить одновременно. Поля - trans_type_code (varchar), raw_record_status (varchar), import_file_id (int) и import_file_line (int). Первые три поля не меняются на каждую импортированную запись, но, очевидно, четвертая. Я выполняю хранимую процедуру для импорта данных из VBS, передавая только import_file_id.Импорт различного количества полей в MS SQL из текстовых файлов

Сначала я решил указать поля назначения для импортированного текста с помощью BULK INSERT и FORMATFILE, но я не мог понять, как заполнять другие поля одновременно. Я также не знал, как получить номер строки из файла импорта.

Я создал процесс, использующий массовую вставку в временную таблицу, а затем выберите из таблицы temp, чтобы вставить в import_raw_records, чтобы заполнить первые четыре поля, перечисленные выше, но не все записи импорта имеют одинаковое количество полей , Если я создаю временную таблицу с максимальным количеством возможных полей для импортированных данных, данные в текстовом файле заканчиваются заполнением каждого поля без переноса на следующую запись на основе ROWTERMINATOR = \ n, который я использую. Записи с импортированными только четырьмя полями заполнят 20 полей в таблице temp в одной записи, а не создают пять отдельных записей в таблице temp.

Я подтвердил, что CRLF в моем файле импорта действительно 0D0A. Это код, который импортирует данные: set @sqlcmd = ' BULK INSERT #temp_import_records FROM ''' + @import_file + ''' WITH (ROWTERMINATOR = ''\n'') '

Каков наилучший способ справиться с этим? Должен ли я приближаться к этому по-другому? Я не совсем новичок, но мне все еще очень сложно узнать о SQL. Спасибо, что прочитали это, и я надеюсь, что вы сможете помочь.

Спасибо, Джон

+0

Похоже, ваша настоящая проблема заключается в том, что ваш исходный файл не имеет хороших разделителей. Я бы опубликовал это как вопрос с некоторыми образцами данных. – David

+0

@ Давид, спасибо, что помог мне сузить это. Я тоже это сделаю, но это звуковая методология для того, что я пытаюсь сделать, или есть лучший способ? – user3014525

ответ

0

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

Обратите внимание, что «BULK INSERT» не обрабатывает escape-символы, поэтому, если вы сохраняете одну ячейку, содержащую встроенный фид, Excel будет обрабатывать ее в порядке, но «BULK INSERT» будет рассматривать ее как разделитель записей и вставить две строки ,

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