Текст был усечен или один или несколько символов не соответствовали целевой кодовой странице При импорте из файла Excel

У меня есть файл Excel с четырьмя текстовыми столбцами: один из них называется ShortDescription, который имеет самое длинное значение. Я создал таблицу в базе данных SQL Server 2008 с четырьмя столбцами, и для типа столбца ShortDescription установлено значение NvarChar (Max).

но при использовании диалогового окна импорта и экспорта SSIS я продолжаю получать указанную ошибку в заголовке, даже когда я установил для параметра OnTruncation значение «Игнорировать».

Я попытался очистить данные столбца, и это удалось (поэтому я убедился, что проблема в столбце ShortDescription). Я попытался скопировать все данные в другую рабочую книгу Excel, но все равно не повезло.

Любые идеи ???


person Nour    schedule 25.12.2011    source источник


Ответы (7)


Я предполагаю, что вы пытаетесь импортировать это с помощью источника Excel в диалоговом окне SSIS?

Если это так, проблема, вероятно, в том, что SSIS выбирает некоторое количество строк в начале вашей электронной таблицы при создании источника Excel. Если в столбце [ShortDescription] он не замечает ничего слишком большого, по умолчанию будет использоваться текстовый столбец из 255 символов.

Итак, чтобы импортировать данные из столбца, содержащего строки с большими объемами данных, без усечения, есть два варианта:

  1. Вы должны убедиться, что столбец [ShortDescription] хотя бы в одной из выбранных строк содержит значение, длина которого превышает 255 символов. Один из способов сделать это - использовать функцию REPT (), например. = REPT ('z', 4000), что создаст строку из 4000 буквы 'z'.
  2. Чтобы включить такую ​​строку, необходимо увеличить количество строк, отбираемых драйвером Jet Excel. Вы можете увеличить количество отбираемых строк, увеличив значение TypeGuessRows в разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel (или, если ваша система x64, то в разделе HKEY_LOCAL_MACHINE\SOFTWARE\wow6432node\Microsoft\Jet\4.0\Engines\Excel).

Вы можете увидеть больше информации по этим двум ссылкам:

Для дальнейшего объяснения, SSIS создает 3 объекта за кулисами мастера, объект источника данных Excel, целевой объект таблицы SQL и оператор потока данных между ними. Исходный объект Excel определяет исходные данные и существует независимо от двух других объектов. Итак, когда он создается, выполняется описанная мною выборка и устанавливается размер исходного столбца. Таким образом, к тому времени, когда оператор потока данных выполнится и попытается извлечь данные из excel для помещения в вашу таблицу, он уже просматривает источник данных, размер которого ограничен 255 символами.

person TetonSig    schedule 25.12.2011
comment
это удивительно верно !!! но почему это происходит, если целевой столбец настроен на прием максимальной длины данных ?? так какое отношение к этому имеет длина исходного столбца ??? - person Nour; 25.12.2011
comment
Примечание. Для 64-битных систем соответствующий ключ выглядит следующим образом: HKLM\SOFTWARE\wow6432node\microsoft\jet\4.0\engines\excel - ссылка Но, очевидно, значение может быть только до 16? Не похоже, чтобы это было значительным улучшением, но я не тестировал это. - person PeterX; 08.02.2013
comment
Для меня сработала сортировка строк с самым длинным текстом вверху. @NourSabouny, я думаю, он говорит, что оператор потока данных в середине ошибается, даже если для столбца назначения установлено значение nvarchar (max). - person bendodge; 21.05.2018

У меня возникла эта проблема при импорте из плоского файла с разделителями в SQL Server. Решением было обновить значение OutputColumnWidth для столбца с нарушением (из сообщения об ошибке). В форме «Выбрать источник данных» в мастере импорта моим источником был плоский файл. На самой левой панели выберите «Дополнительно». Затем вы можете установить свойства отдельных столбцов. В моем случае «OutputColumnWidth» для большинства моих столбцов по умолчанию было равно «50». Я просто обновил его до большего значения, которое не привело бы к усечению значения из плоского файла.

введите описание изображения здесь

person Dean    schedule 21.04.2014
comment
В качестве альтернативы, вместо того, чтобы угадывать достаточно большой предел для DT_STR, вы можете выбрать тип SSIS DT_NTEXT, который является эквивалентом MSSQL nvarchar (max) или устаревших типов ntext. - person eidgenossen; 08.01.2015
comment
У меня сработало сочетание обновления OutputColumnWidth и использования DataType DT_WSTR. В SQL Server 2014 DT_WSTR может иметь ширину OutputColumnWidth до 4000 символов Юникода. Это привело к чему-то похожему на ответ 40-Love ниже. - person Jasper; 11.05.2015
comment
Можете ли вы изменить все эти столбцы сразу? У меня много столбцов, и мне было интересно, возможно ли это. - person Lostaunaum; 17.06.2016
comment
Это была моя проблема. +1 - person Lee; 30.06.2017

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

person Kalel Wade    schedule 10.06.2014
comment
Для меня это был кратчайший путь к успеху. - person Prisoner ZERO; 06.08.2015
comment
Хммм, не знаю, чем это отличается от решения. Это решение кажется более подходящим для обмена стеками. ~ (: - person dcary; 11.01.2018

У меня возникла эта ошибка, когда я пытался импортировать большой файл с некоторыми китайскими иероглифами, а также с некоторыми недопустимыми (большими) строками.

Текстовый файл был сохранен в формате UTF8.

Мои настройки:

По общему варианту (ничего не менял):

- Locale: English (United States) 
- Unicode: Unchecked
- Code Page: 65001 (UTF-8)

Слева есть расширенный вариант

- DataType (for column): Unicode String [DT_WSTR] (changed)
- OutputColumnWidth: 4000 (that's the maximum) (changed)

При просмотре сопоставления типов данных

- On Error: Ignore
- On Truncation: Ignore

У моего целевого столбца ширина = 50.

У меня нет ошибок с этими настройками.

person live-love    schedule 15.05.2014
comment
Спасибо за публикацию. Во время импорта я получал то же сообщение об ошибке, вызванное упомянутой выше проблемой: попыткой импортировать данные, содержащие посторонние символы, в поля с типами данных, которые не принимали посторонние символы. Мое краткосрочное решение заключалось в удалении посторонних символов из данных, которые я пытался импортировать. - person cjo30080; 11.10.2017

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

Если вы не можете найти его на

Пуск–> ВЫПОЛНИТЬ–> RegEdit–> HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

тогда загляни в

Пуск–> RUN–> RegEdit–> HKEY_LOCAL_MACHINE -> ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ -> Wow6432Node -> Microsoft -> Jet -> 4.0 -> Двигатели -> Excel

person Charles Mulwa    schedule 23.12.2014

Мне помогла эта ссылка: https://support.microsoft.com/en-us/kb/189897

  1. Скопируйте строку со значением ячейки> 255 символов в начало Excel, сделайте эту строку первой строкой в ​​Excel.
  2. измените значение реестра по указанной выше ссылке.
person Jaydeep Shil    schedule 30.03.2016

Попробуйте это - перейдите к задаче потока данных> щелкните правой кнопкой мыши источник данных Excel> щелкните Показать расширенный редактор> выберите свойства ввода и вывода> разверните исходный вывод Excel> разверните внешние столбцы и столбцы вывода, проверьте ошибочные столбцы и щелкните заголовки этих столбцов. и соответствующим образом обновите тип данных (в основном это должен быть текстовый поток Unicode [DT_NTEXT], в противном случае измените его и попробуйте). Надеюсь на эту помощь.

person ratcoder    schedule 03.05.2020