sql основная вставка с дополнительной колонкой - PullRequest
3 голосов
/ 12 октября 2010

CSV-файл содержит 8 столбцов (col1, col2, ..., col8), а имя файла содержит дату, которая также должна быть вставлена ​​в таблицу.

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

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

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

DateTime eventTime = extractDate(path);

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

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

Спасибо!

1 Ответ

5 голосов
/ 12 октября 2010

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

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

  • Определить имя дополнительного столбца и значение для загрузки в него (скажем, MyDate и «1 января 1980»)
  • Создать (временное) значение по умолчанию для таблицы на основе этого (ATLER TABLE MyTable добавить ограничение DF_TempLoad по умолчанию '1 января 1980' для MyDate [ проверить синтаксис, возможно, он выключен ]
  • Создать (временное) представление для таблицы, перечисляя только те столбцы, которые должны быть вставлены в массовом порядке
  • Запустите БОЛЬШУЮ ВСТАВКУ против вида; столбцу, не включенному в представление, будет присвоено значение по умолчанию
  • Отбросить взгляд
  • Отменить ограничение по умолчанию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...