SSIS Excel импорт принудительное неправильный тип столбца

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

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

EDIT: я нашел это:http://support.microsoft.com/kb/236605

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

16 ответов


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

;Extended Properties="IMEX=1"

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


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

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

откройте электронную таблицу с помощью Excel.

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

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

выбираем "текст по столбцам". Это поднимет мастер преобразования текста в Столбцы.

- На Шаге 1: Нажмите Кнопку Далее

- На Шаге 2: Нажмите Кнопку Далее

-на Шаге 3: Выберите текст и нажмите кнопку Готово

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

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

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

Мастер Импорта Данных Не Любит Тип Данных, Который Я Выбираю Для Столбца


одна вещь, которая не упоминается в принятом ответе, заключается в том, что параметр" IMEX=1 " должен идти внутри цитируемый фрагмент:

...;Extended Properties="...";

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

enter image description here


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


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

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


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

надеюсь, что это помогает


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

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

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


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

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

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

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

первый этап:

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

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

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

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

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

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

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

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

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


1. Используйте Visual Basic для перебора каждого столбца и форматирования каждого столбца в виде текста.

используйте меню Text-to-Columns, не меняйте делиминацию и измените "General" на "Text"


У меня была та же проблема. Проблема сидит в Источник Excel задач. При настройке этой задачи в первый раз задача подключится к указанному файлу Excel (через соединение Excel) и решит, какой тип каждого столбца основан на текущей электронной таблице.

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

надеюсь, что это имеет смысл!


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

решение

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

сейчас в пакет служб ssis удалить и воссоздать источник Excel и таблица назначения измените столбец тип данных как varchar.

Это будет работать.


Если в электронной таблице excel присутствует несколько столбцов с одинаковым именем, возникает такая ошибка. Пакет будет работать после того, как имя столбца будет отличаться. Иногда скрытые столбцы игнорируются при проверке имен столбцов.


  1. нажмите Файл в меню ленты, а затем нажмите кнопку Параметры.
  2. Нажмите кнопку Дополнительно, а затем в разделе при расчете этой книги установите флажок задать точность как отображается и нажмите кнопку ОК.

  3. нажмите OK.

  4. на листе выберите ячейки, которые требуется отформатировать.

  5. на вкладке Главная нажмите кнопку вызова диалогового окна рядом к Число.

  6. в поле "категория" выберите номер.

  7. в поле десятичные знаки введите количество десятичных знаков, которые вы хотите показать.


Это работает для меня. Выберите проблемный столбец в Excel-выделите весь столбец. Измените формат на "текст". Сохраните файл Excel.

в пакете служб SSIS перейдите на панель поток данных для импорта. Дважды щелкните узел источника "Excel". Он должен предупредить вас, что типы изменились, и спросить вас, Хотите ли вы их переназначить. Нажмите Кнопку Да. Теперь выполнение должно работать и приносить все значения.

Примечание: я использую Excel 2013 и Visual Studio 2015, но я предполагаю эти инструкции будут работать и для более ранних версий.


мне потребовалось немного, чтобы понять источник ошибки в моем пакете. В конечном итоге я обнаружил, что данные были преобразованы в значение null (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