2010-10-12 5 views
3

Файл csv содержит 8 столбцов (col1, col2, ..., col8), а имя файла содержит дату, которая также должна быть вставлена ​​в таблицу.sql bulk insert с дополнительной колонкой

Если число столбцов в таблице и столбцы в файле CSV равно следующий импорт запроса всех записи из файла в таблицу:

query += "BULK INSERT real_data FROM '" + path + "' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')"; 

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

DateTime eventTime = extractDate(path); 

и хотел вставить eventTime в 9-м столбца для каждой записи импортируемой из файла.

Кто-нибудь знает, как изменить/создать запрос запроса, чтобы импортировать 8 столбцов из файла и добавить дату как 9-й столбец для каждой импортированной записи?

Спасибо!

ответ

5

Вы не можете добавить «произвольный столбец» в набор данных, загружаемый командой BULK INSERT. (Пакеты SSIS может сделать это, если вы хотите иметь дело с их сложностью.)

Следующая хитрость немного сложным, но я использовал его несколько раз успешно:

  • Определить имя из дополнительный столбец и значение для загрузки в него (скажем, MyDate и «1 января 1980 года))
  • Создайте (временное) значение по умолчанию в таблице на основе этого (ATLER TABLE MyTable добавляет ограничение DF_TempLoad по умолчанию '1 января 1980 года) для MyDate [проверьте синтаксис, он может быть выключен]
  • Создать (временный) вид на вкладке le, перечисляя только те столбцы, которые должны быть вставлены в массу
  • Запустите BULK INSERT против вида; столбцу, не включенному в представление, будет присвоено значение по умолчанию
  • Оставить комментарий
  • Удалить ограничение по умолчанию.
+1

Я также использовал это. Предостережение: если вы создали это в утилите, которая будет загружать несколько файлов последовательно, вы не сможете «наблюдать» за загрузкой таблицы, даже с чем-то доброкачественным, как «select count (*) из MyTable с помощью (nolock)». Вам нужно будет создать надежный метод повтора в разделе «ALTER TABLE», потому что ему нужен эксклюзивный доступ к таблице. –

+1

Примечание: если вы можете использовать файл формата bcp, вам не нужно использовать временное представление. –