Импорт SSIS Excel для принудительного ввода типа столбца
Я пытаюсь импортировать электронную таблицу в нашу базу данных с помощью SSIS. По какой-то причине SSIS хочет верить, что два столбца имеют тип Double, когда они содержат символьные данные. Я попытался переназначить столбцы как nvarchar (255), но он по-прежнему не хочет выбирать данные, которые, по его мнению, удваиваются, потому что в нем есть символы. Если я попытаюсь отредактировать пакет SSIS и изменить типы столбцов в источнике Excel, он не позволит мне изменить тип столбцов в выводе ошибки и даст мне ошибку, если обычные столбцы вывода вывода и ошибки не матч.
Почему SSIS настаивает на том, что эти столбцы Double? Как я могу заставить его понять, что это строки? Почему все, что требуется от Microsoft, должно работать неправильно?
EDIT: Я нашел это: http://support.microsoft.com/kb/236605
Я отсортировал свои данные, чтобы смешанные типы данных были наверху, и угадайте, что: проблема изменилась. Вместо того, чтобы не импортировать символьные данные, он прекратил импорт чисто числовых данных. Видимо, кто-то не думает, что 12345 может быть представлен в виде строки...
Ответы
Ответ 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="...";
Ответ 4
; IMEX = 1; не всегда работает... Все о смешанных типах данных в Excel:
Смешанные типы данных в столбце Excel
![enter image description here]()
Ответ 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, но я полагаю, что эти инструкции будут работать и для более ранних версий.