Текст был усечен или один или несколько символов не совпадали в целевой кодовой странице при импорте из файла Excel - PullRequest
55 голосов
/ 25 декабря 2011

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

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

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

есть идеи ???

Ответы [ 6 ]

66 голосов
/ 25 декабря 2011

Я полагаю, вы пытаетесь импортировать это, используя источник 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 символами.

32 голосов
/ 21 апреля 2014

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

enter image description here

8 голосов
/ 10 июня 2014

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

6 голосов
/ 15 мая 2014

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

Текстовый файл был сохранен в формате 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.

Я не получил ошибок с этими настройками.

1 голос
/ 30 марта 2016

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

  1. Скопируйте строку с значением ячейки> 255 символов в начало Excel, сделайте эту строку первой строкой в ​​Excel
  2. изменить значение реестра по приведенной выше ссылке.
1 голос
/ 24 декабря 2014

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

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

Пуск-> RUN-> RegEdit-> HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

тогда посмотрите в

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

...