SQL Server 2005 Импорт из Excel - PullRequest
       19

SQL Server 2005 Импорт из Excel

0 голосов
/ 27 апреля 2010

Я хотел бы знать, как лучше всего импортировать данные из файла Excel на еженедельной или ежемесячной основе. Сначала я думал, что буду использовать SSIS, но после большой борьбы с, казалось бы, простыми задачами, я начинаю переосмысливать свой план. Было бы лучше / проще просто написать SQL вручную или воспользоваться услугами пакета служб SSIS? Основной процесс будет следующим:

  1. Отдельный процесс загрузит файл .xls на локальный файловый ресурс.
  2. Файл xls будет иметь имя файла, например: «myfilename MON YY».
  3. Мне нужно будет прочитать месяц и год из имени файла, переформатировать его в дату sql и затем запросить таблицу DimDate, чтобы найти соответствующий ключ даты.
  4. Для каждой строки (после первых 2 строк заголовка) вставьте данные с ключом даты, если строка не является итоговой строкой, а затем игнорируйте.

Вот некоторые проблемы, с которыми я сталкивался при SSIS: Я могу разобрать строку даты из источника данных в виде плоского файла, но, похоже, не могу сделать это с источником данных Excel. Кроме того, после анализа я не могу преобразовать строку в дату, чтобы выполнить поиск ключа даты. Например, я хочу сделать что-то вроде этого:

выберите DateKey из DimDate где ActualDate = convert (datetime, '01 - '+' JAN-10 ', 120)

но я не думаю, что можно использовать ключевые слова 'convert' или 'datetime' в построителе выражений. Мне также не удалось найти, где я могу отредактировать SQL, чтобы игнорировать первые 2 строки данных.

Я очень скептически отношусь к использованию SSIS, потому что это кажется хитрым способом сделать что-то, что, вероятно, может быть выполнено более эффективно при написании SQL самостоятельно, но я могу быть вынужден использовать SSIS. Мысли?

1 Ответ

3 голосов
/ 28 апреля 2010

Служба SSIS - определенно направление.

Чтобы решить ваши проблемы: (DT_DBTIMESTAMP) - это нужное вам преобразование. Синтаксис немного другой. Например, чтобы преобразовать дату вашего примера, я бы использовал:

(DT_DBTIMESTAMP)"01/01/2010"

Если вы используете это выражение в производном столбце для замены строковой даты (или создания нового столбца), вы можете выполнить поиск по столбцам даты и времени в БД.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...