Подтвердить что ты не робот

Импорт SSIS Excel для принудительного ввода типа столбца

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

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

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

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

4b9b3361

Ответ 1

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

;Extended Properties="IMEX=1"

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

Ответ 2

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

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

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

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

Нажмите вкладку "Данные" в меню ленты.

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

-On Шаг 1: Нажмите "Далее"

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

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

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

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

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

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

Ответ 3

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

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

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

Ответ 9

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

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

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

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

Первый шаг:

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

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

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

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

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

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

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

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

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

Ответ 10

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

Используйте меню "Текст-Колонки", не меняйте разделитель и меняйте "Общие" на "Текст"

Ответ 11

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

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

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

Ответ 12

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

Решение

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

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

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

Ответ 13

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

Ответ 14

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

  • Нажмите "ОК".

  • На листе выберите ячейки, которые вы хотите отформатировать.

  • На вкладке "Главная" щелкните изображение кнопки "Пуск" диалогового окна рядом с Число.

  • В поле "Категория" нажмите "Номер".

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

Ответ 15

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

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

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