Неверный тип столбца в службе импорта служб SSIS Excel - PullRequest
49 голосов
/ 12 февраля 2009

Я пытаюсь импортировать электронную таблицу в нашу базу данных, используя SSIS. По какой-то причине SSIS хочет верить, что два столбца имеют тип Double, если они содержат символьные данные. Я попытался переназначить столбцы в nvarchar (255), но он по-прежнему не хочет выбирать данные, которые он считает двойными, потому что в нем есть символы. Если я попытаюсь отредактировать пакет служб SSIS и изменить типы столбцов в источнике Excel, он не позволит мне изменить тип столбцов в выводе ошибок и выдаст ошибку, если обычные столбцы вывода и вывода ошибок не матч.

Почему SSIS настаивает на том, чтобы эти столбцы были Double? Как я могу заставить его понять, что это строки? Почему у Microsoft все должно работать не совсем корректно?

РЕДАКТИРОВАТЬ:

Я нашел это:

Я отсортировал свои данные так, чтобы смешанные типы данных были наверху, и угадайте, что: Проблема обратилась . Вместо того, чтобы не импортировать символьные данные, он прекратил импорт чисто числовых данных. Очевидно, кто-то не думает, что 12345 можно представить в виде строки ...

Ответы [ 16 ]

41 голосов
/ 12 февраля 2009

Я видел эту проблему раньше, это проблема Excel, а не SSIS. Excel выбирает первые несколько строк, а затем выводит тип данных, даже если вы явно задаете для него текст. Что вам нужно сделать, это поместить это в строку подключения файла Excel в пакете служб SSIS. Эта инструкция сообщает Excel, что столбцы содержат смешанные типы данных, и предлагает выполнить дополнительную проверку, прежде чем решить, что столбец является числовым типом, хотя на самом деле это не так.

;Extended Properties="IMEX=1"

Это должно работать с этим (в большинстве случаев). Безопаснее всего экспортировать данные Excel в текст с разделителями табуляции и использовать SSIS для их импорта.

33 голосов
/ 23 апреля 2009

Вы можете преобразовать (т.е. принудительно) данные столбца в текст ... Попробуйте это (Примечание: эти инструкции основаны на Excel 2007) ...

Следующие шаги должны заставить Excel обрабатывать столбец как текст:

Откройте таблицу в Excel.

Выберите весь столбец, содержащий ваши «в основном числовые данные», нажав на заголовок столбца.

Перейдите на вкладку «Данные» в меню ленты.

Выберите текст в столбцах. Откроется мастер преобразования текста в столбцы.

-на шаг 1: нажмите Далее

-на шаг 2: нажмите Далее

- На шаге 3: выберите «Текст» и нажмите «Готово»

Сохраните свой лист Excel.

Повторите попытку импорта с помощью мастера импорта данных SQL Server 2005.

Кроме того, вот ссылка на другой вопрос, который имеет дополнительные ответы:

Мастеру импорта данных не нравится тип данных, который я выбираю для столбца

13 голосов
/ 04 августа 2009

Одна вещь, которая не упоминается в принятом ответе, заключается в том, что параметр «IMEX = 1» должен идти внутри в кавычках:

...;Extended Properties="...";
7 голосов
/ 03 августа 2011

; IMEX = 1; не всегда работает ... Все о смешанных типах данных в Excel: Смешанные типы данных в столбце Excel

enter image description here

5 голосов
/ 16 июня 2011

Другим обходным решением является сортировка электронной таблицы с символьными данными вверху, что приводит к тому, что Excel видит столбец в виде строки, и импортирует все как таковое.

3 голосов
/ 07 июля 2011

Вы также можете изменить реестр, чтобы посмотреть больше значений, чем только первые 8 строк. Я использовал этот метод и работает довольно хорошо.

http://support.microsoft.com/kb/281517

1 голос
/ 14 мая 2015

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

  • Похоже, что строки, отсканированные драйвером OLEDB, содержат числа, но в дальнейшем содержат смешанные значения в наборе записей, или
  • Поля содержат только цифры, но некоторые источники имеют формат текста (обычно это файлы Excel).

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

Наши исходные файлы обычно содержат заголовки полей (текст) и цены (числовые поля), что дает мне простое решение:

Первый шаг:

  • Измените ваш оператор SQL, чтобы включить поля заголовка. Это силы SSIS для просмотра всех полей в текстовом виде, включая поля цен.

Для смешанных полей:

  • Ваша первоначальная проблема решена, потому что ваши поля теперь текстовые, но у вас все еще есть строка заголовка в выходных данных.
  • Не допускайте попадания строки заголовка в ваш вывод, изменив предложение SQL WHERE, чтобы исключить значения заголовка, например. "ГДЕ НЕ ([F4] = 'Цена')"

Для числовых полей:

  • Используя расширенный редактор для источника OLE DB, установите вывод столбец для поля цены (или любого другого числового поля) в числовой Тип данных. Это вызывает любые записи, которые содержат текст в этих полях потерпеть неудачу, включая запись заголовка, но принудительно преобразует числовые значения сохраняются в виде текста.

  • Установите вывод ошибок, чтобы игнорировать сбои в числовых полях.

  • В качестве альтернативы, если вам все еще нужны какие-либо ошибки в перенаправленных числовых полях, удалите строку заголовка, изменив предложение SQL WHERE, чтобы исключить значения заголовка,

  • Установите вывод ошибок для перенаправления ошибок в этом поле.

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

1 голос
/ 16 июня 2014

Я использовал следующий рецепт:

  1. Импорт данных из Excel в Access
  2. Импорт данных из Access на SQL Server

и у меня это сработало ...

1 голос
/ 06 апреля 2012

Ну, IMEX = 1 не работает для меня. Рейнье Бойзен тоже не предложил. (Я не знаю, если это имеет значение, но я использую SQL Server 2008r2). Хорошее объяснение некоторых обходных путей, а также некоторые объяснения того, почему IMEX = 1 ограничен первыми восемью строками каждой электронной таблицы, можно найти по адресу http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/78b87712-8ffe-4c72-914b-f1c031ba6c75

Надеюсь, это поможет

0 голосов
/ 06 августа 2018

Мне понадобилось немного времени, чтобы понять источник ошибки в моем пакете. В конечном итоге я обнаружил, что данные были преобразованы в нуль (Example: from "06" to "NULL"), и нашел это с помощью предварительного просмотра в подключении исходного файла (Excel Source> Edit> Connection Manager> Sheet='MySheet'> Preview...). Я был взволнован, когда прочитал сообщение Джеймса, чтобы изменить строку подключения, чтобы иметь расширенные свойства: ;Extended Properties="IMEX=1". Но это не сработало для меня.

Мне удалось устранить ошибку, изменив формат ячейки на листе Excel с «Число» на «Текст». После изменения формата процесс загрузки прошел успешно! Моя строка подключения выглядит так: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\myServer\d$\Folder1\Folder2\myFile.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=NO";

Вот несколько скриншотов, которые разрешили мое сообщение об ошибке.

Ошибка : Метаданные подключения к файлу Excel enter image description here

Источник ошибки : Общий формат enter image description here

Источник ошибки изменен : Формат «Текст» enter image description here

Исправлена ​​ошибка : Метаданные подключения к файлу Excel enter image description here

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