Ошибка преобразования типов данных при импорте из Excel в SQL Server 2008 - PullRequest
9 голосов
/ 21 марта 2012

Каждый раз, когда я пытаюсь импортировать файл Excel в SQL Server, я получаю конкретную ошибку. Когда я пытаюсь редактировать сопоставления, значением по умолчанию для всех числовых полей является float. Ни в одном из полей в моей таблице нет десятичных знаков, и они не относятся к типу данных money. Это всего 8 цифр. Однако, так как я не хочу, чтобы мой первичный ключ хранился как число с плавающей точкой, когда это int, как я могу это исправить? Это дает мне какую-то ошибку усечения, я выложу шапку экрана при необходимости. Это общая проблема?

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

http://imgur.com/4204g

Ответы [ 6 ]

9 голосов
/ 21 марта 2012

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

У вас есть несколько вариантов:

  • Изменить тип данных назначения на float
  • Загрузить впромежуточная таблица с типом данных float с помощью мастера импорта, а затем INSERT в таблицу реального назначения с использованием CAST или CONVERT для преобразования данных
  • Создайте пакет служб SSIS и используйте Преобразование данных преобразование для преобразования данных

Возможно, вы также захотите отметить комментарии в документации мастера импорта о сопоставлениях типов данных.

7 голосов
/ 15 августа 2013

Отказ от того, что сказал Derloopkat, который все еще может потерпеть неудачу при преобразовании (без обид Derloopkat), потому что Excel ужасен в этом:

  1. Вставить из Excel в Блокнот и сохранить как обычно (TXT-файл).
  2. Из Excel откройте указанный .txt файл.
  3. Выберите следующий, поскольку он явно разделен табуляцией.
  4. Выберите «none» для квалификатора текста, затем снова снова.
  5. Выберите первую строку, удерживайте Shift, выберите последнюю строку и выберите текстовую радиальную кнопку. Нажмите Готово

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

4 голосов
/ 19 декабря 2012

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

Решение:

  1. Создать новый лист Excel с именем столбцов в первой строке
  2. Форматирование столбцов как текста
  3. Вставка строк без формата (используйте формат CVS или скопируйте / вставьте в блокноте, чтобы получить только текст)

Примечаниечто форматирование столбцов на существующем листе Excel недостаточно.

2 голосов
/ 25 ноября 2014

Существует обходной путь.

  1. Импорт листа Excel с числами в виде числа с плавающей запятой (по умолчанию).
  2. После импорта перейдите в Таблицу-дизайн
  3. Изменить тип данных изстолбец от Float до Int или Bigint
  4. Сохранить изменения
  5. Изменить тип данных столбца с Bigint на любой тип текста (Varchar, nvarchar, text, ntext и т. д.)
  6. СохранитьИзменения.

Вот и все.

1 голос
/ 17 мая 2016

Похоже, что действительно простое решение при работе с проблемами типов данных.

Как правило, в конце строки подключения к Excel добавьте ;IMEX=1;"

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\YOURSERVER\shared\Client Projects\FOLDER\Data\FILE.xls;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";

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

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

0 голосов
/ 31 августа 2017

Обходной путь, который нужно рассмотреть в крайнем случае:

  1. сохраните копию файла Excel, измените столбец, чтобы отформатировать тип 'text'
  2. , скопируйте значения столбца и вставьте втекстовый редактор, сохраните файл (назовите его tmp.txt ).
  3. измените данные в текстовом файле так, чтобы они начинались и заканчивались символом, чтобы механизм импорта SQL Server распознавалкак текстЕсли у вас есть модный редактор, используйте прилагаемые инструменты.Я использую awk в cygwin на моем ноутбуке с Windows.Например, я начинаю конец и заканчиваю значение столбца одинарной кавычкой, например " $ awk '{print" \ x27 "$ 1" \ x27 "}' ./tmp.txt> ./tmp2.txt"
  4. скопируйте и вставьте данные из tmp2.txt поверх необходимого столбца в файле Excel и сохраните файл Excel
  5. запустите импорт SQL Server для вашего измененного файла Excel ..Обязательно дважды проверьте, что выбранный импортером тип данных не является числовым ... если это так, повторите описанные выше шаги с другим набором символов

Данные в базе данных будут иметькавычки после завершения импорта ... вы можете обновить данные позже, чтобы удалить кавычки, или использовать функцию "replace" в вашем запросе на чтение, такую ​​как " replace ([dbo]. [MyTable]. [MyColumn], '' '', '')"

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