Значение не может быть преобразовано из-за потенциальной потери данных [закрыто]

12

Позвольте мне начать с разъяснения, что это не дублирующий вопрос и не потенциальный дубликат в этом отношении. Я безуспешно пытался реализовать каждый ответ на каждый существующий вариант этой проблемы в StackOverflow и DBA Stack Exchange.

Я боролся с этой проблемой в течение последних двух дней (работая над ней примерно 7 часов в день), и даже после поиска в Google, похоже, ни у кого больше нет такого точного варианта моей проблемы.

Что я пытаюсь сделать?

В SSIS я пытаюсь прочитать файл CSV и вставить строки из него в базу данных OLE DB. Для этого я сделал самую простую настройку из всех, что было показано ниже.

  1. Flat File Source - читает строки CSV.
  2. Derived Column - в настоящее время ничего не делает (это просто для экспериментов).
  3. Data Conversion - в настоящее время ничего не делает (это просто для экспериментов).
  4. OLE DB Destination - сохраняет строки в базе данных.

Когда я пытаюсь запустить его, он перестает выполняться в моем месте назначения OLE DB со следующим сообщением об ошибке.

Произошла ошибка с входным столбцом «Сумма» (187) на входе «Целевой вход OLE DB» (51). Возвращено состояние столбца: «Невозможно преобразовать значение из-за потенциальной потери данных».

Столбец, который терпит неудачу ( Amount), в настоящее время имеет тип DT_STR. Похоже, это тот тип, в который я больше всего верю сейчас.

Что я пробовал?

  • Я попытался использовать Flat File Connectionфункцию «Предложить типы» для столбца, который не работает. Это позволило рекомендовать Single byte signed intтип данных.
    • Останавливается на моем источнике плоских файлов .
    • Ошибка : преобразование данных не удалось. Преобразование данных для столбца «Сумма» вернуло значение состояния 2 и текст состояния «Значение не удалось преобразовать из-за потенциальной потери данных».
  • Я пытался использовать, Derived Columnчтобы привести столбец в DT_I4.
    • Останавливается на моей производной колонке .
    • Ошибка : преобразование данных не удалось. Преобразование данных для столбца «Сумма» вернуло значение состояния 2 и текст состояния «Значение не удалось преобразовать из-за потенциальной потери данных».
  • Я пытался использовать Data Conversionдля приведения значения моего столбца к DT_I4.
    • Останавливается на моем Data Conversion.
    • Ошибка : преобразование данных не удалось. Преобразование данных для столбца «Сумма» вернуло значение состояния 2 и текст состояния «Значение не удалось преобразовать из-за потенциальной потери данных».
  • Я попытался изменить длину моего DT_STRзначения в источнике и месте назначения.
    • Останавливается у источника или места назначения в зависимости от настроек.
  • Я попытался подключиться, используя вместо этого исходный коннектор Excel с добавленной строкой подключения и без нее IMEX=1. Неудачно.

Мой смысл программирования говорит мне, что я облажался. Я никогда не сталкивался с такой большой проблемой для такой простой вещи.

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

Моя система

Это компьютер с Windows Server 2008 R2 с установленным SQL Server 2008. Сама машина полностью обновляется через Центр обновления Windows.

Матиас Ликкегор Лоренцен
источник
Похоже, у меня была эта проблема со значением (несмотря на получение из Access), и мне пришлось использовать определенную кодовую страницу, когда я приводил столбец. У меня больше нет доступа к пакету служб SSIS, чтобы проверить, что я сделал.
Какой тип данных столбца, в который вы пытаетесь вставить Amount?
Джон на все руки
2
Откройте диспетчер соединений с плоскими файлами для CSV. Перейдите на вкладку «Дополнительно» и выберите Amountстолбец. Сделайте снимок экрана и обновите ваш вопрос этой картинкой.
billinkc
Была возможность посмотреть на диспетчер подключений еще?
billinkc
1
Я не верю, что вы облажались, но не видя определения вашего диспетчера подключений, невозможно сказать.
billinkc

Ответы:

3

Я сталкивался с этим несколько раз, и проблема заключалась в несоответствии типов данных в параметрах экспорта / импорта. Первое, что нужно сделать, это проверить эти параметры, щелкнув правой кнопкой мыши по источнику или месту назначения, выбрав Расширенный редактор. Перейдите в Свойства ввода и вывода и проверьте тип данных для этого столбца для всех элементов - внешнего, выходного и входного. Я обычно видел здесь дисперсию, часто один раз - Unicode (WSTR), а другой - I4 или DSTR.

Майк
источник
8

Игнорирование ошибки

Прежде всего, вы должны быть в состоянии игнорировать усечение строки, перейдя в «Источник плоских файлов», «Вывод ошибок», а затем изменив «Fail Component» в «Truncation» на «Ignore Error».

Лучшее решение

Реальная проблема может заключаться в том, что длина строки внутри конвейера служб SSIS все еще неверна, поскольку она была инициализирована в более ранней точке.

Вы можете определить, так ли это, дважды щелкнув зеленую стрелку в источнике плоских файлов (или после преобразования производных столбцов / данных) и выбрав «Метаданные». Там вы можете увидеть длину поля внутри трубопровода.

Если вы часто видели, что метаданные больше не соответствуют исходному компоненту, в основном, если вы создаете источник плоских файлов и соответствующее ему соединение через мастера.

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

Оливер Ранер
источник
2
Это не подпадает под "усечение", хотя. Я уже попробовал это.
Матиас Ликкегор Лоренцен