Позвольте мне начать с разъяснения, что это не дублирующий вопрос и не потенциальный дубликат в этом отношении. Я безуспешно пытался реализовать каждый ответ на каждый существующий вариант этой проблемы в StackOverflow и DBA Stack Exchange.
Я боролся с этой проблемой в течение последних двух дней (работая над ней примерно 7 часов в день), и даже после поиска в Google, похоже, ни у кого больше нет такого точного варианта моей проблемы.
Что я пытаюсь сделать?
В SSIS я пытаюсь прочитать файл CSV и вставить строки из него в базу данных OLE DB. Для этого я сделал самую простую настройку из всех, что было показано ниже.
Flat File Source
- читает строки CSV.Derived Column
- в настоящее время ничего не делает (это просто для экспериментов).Data Conversion
- в настоящее время ничего не делает (это просто для экспериментов).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.
источник
Amount
?Amount
столбец. Сделайте снимок экрана и обновите ваш вопрос этой картинкой.Ответы:
Я сталкивался с этим несколько раз, и проблема заключалась в несоответствии типов данных в параметрах экспорта / импорта. Первое, что нужно сделать, это проверить эти параметры, щелкнув правой кнопкой мыши по источнику или месту назначения, выбрав Расширенный редактор. Перейдите в Свойства ввода и вывода и проверьте тип данных для этого столбца для всех элементов - внешнего, выходного и входного. Я обычно видел здесь дисперсию, часто один раз - Unicode (WSTR), а другой - I4 или DSTR.
источник
Игнорирование ошибки
Прежде всего, вы должны быть в состоянии игнорировать усечение строки, перейдя в «Источник плоских файлов», «Вывод ошибок», а затем изменив «Fail Component» в «Truncation» на «Ignore Error».
Лучшее решение
Реальная проблема может заключаться в том, что длина строки внутри конвейера служб SSIS все еще неверна, поскольку она была инициализирована в более ранней точке.
Вы можете определить, так ли это, дважды щелкнув зеленую стрелку в источнике плоских файлов (или после преобразования производных столбцов / данных) и выбрав «Метаданные». Там вы можете увидеть длину поля внутри трубопровода.
Если вы часто видели, что метаданные больше не соответствуют исходному компоненту, в основном, если вы создаете источник плоских файлов и соответствующее ему соединение через мастера.
Я бы предложил удалить соединение и источник плоских файлов и воссоздать их, поскольку я не нашел способа повторно синхронизировать метаданные конвейера с исходными компонентами.
источник