Проблема формата даты при использовании служб SSIS для Excel в SQL Server - PullRequest
4 голосов
/ 25 июня 2009

Я пытаюсь импортировать столбец дат из электронной таблицы в Excel 2003 в SQL Server 2005 с помощью служб SSIS. Я нахожусь в Великобритании, поэтому хочу, чтобы даты были отформатированы как дд / мм / гггг.

К сожалению, столбец в электронной таблице содержит смесь дат, сохраняемых в виде строк в формате дд / мм / гггг (с форматированием Excel «Общие»), а также даты с использованием формата «Дата» в Excel в формате дд / мм / гггг (с языковым стандартом) «Английский (Великобритания)»).

Так оно и есть, и я не могу ожидать, что пользователи смогут сами разобраться с этим.

При просмотре таблицы все даты выглядят корректно, т. Е. Дд / мм / гггг.

Я пытаюсь импортировать значения в столбец varchar в таблице хранения в базе данных. Затем я запускаю хранимую процедуру, которая копирует эти значения в соответствующую таблицу, которая содержит столбец datetime.

Проблема в том, что даты, которые хранятся в электронной таблице и используют форматирование даты, импортируются как SQL / MM / гггг в SQL Server, а даты, сохраненные в виде строк, импортируются как dd / MM / гггг. У меня IMEX = 1 в строке подключения.

Наличие дат в обоих столбцах varchar в обоих форматах, очевидно, вызывает проблему, когда я пытаюсь поместить их в столбец datetime, поэтому

SET DATEFORMAT MDY;    
SET DATEFORMAT DMY;

бесполезны.

Кто-нибудь знает, почему пакет служб SSIS импортировал бы, казалось бы, правильные даты из электронной таблицы Excel в SQL Server как MM / dd / yyyy?

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

Есть еще идеи?!

Большое спасибо,

Anthony

Ответы [ 2 ]

3 голосов
/ 25 июня 2009

Я думаю, что вы ответили на свой вопрос. Импорт ячеек с форматированием даты рассматривается как даты, а остальные - как строка. Возможно, вы установили дату сервера SQL MM / dd / yyyy и, следовательно, конверсию.

Почему бы вам не попробовать добавить шаг преобразования данных в ваш пакет служб SSIS и преобразовать все значения в столбце в один формат - дату-время или строку. Тогда я уверен, что SQL-сервер будет обрабатывать их все одинаково.

Raj

1 голос
/ 29 сентября 2016

Для меня сработало добавление IMEX=1 в строку подключения к Excel.

Так это будет выглядеть так:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Folder1\Book1.xls;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";
...