Ошибки усечения при импорте в SQL Server 2005 из Excel - PullRequest
15 голосов
/ 24 июня 2009

Короче говоря, я беру кучу документов Excel по одному и импортирую их с помощью мастера импорта / экспорта в базу данных в SQL Server 2005.

Вот один отчет (все не показанные процессы являются «Успешными»). Есть ли способ игнорировать ошибки усечения? Я гуглил безрезультатно, или, по крайней мере, в моей версии.

- Executing (Success)

- Copying to [Datadev].[dbo].[Sheet0$] (Error)
  Messages
  * Error 0xc020901c: Data Flow Task: There was an error with output

столбец «Значение Значение Описание» (234) на выходе «Исходный код Excel» (9). Возвращен статус столбца: "Текст был усечен или один или несколько персонажи не совпадают в целевой кодовая страница. (Мастер импорта и экспорта SQL Server)

  * Error 0xc020902a: Data Flow Task: The "output column "Value

Значение Описание "(234)" не выполнено потому что произошло усечение, а расположение строки усечения на «выходе» колонка "Значение Значение Описание" (234) "указывает сбой на усечение. Ошибка усечения произошло на указанном объекте указанный компонент. (Мастер импорта и экспорта SQL Server)

  * Error 0xc0047038: Data Flow Task: SSIS Error Code

DTS_E_PRIMEOUTPUTFAILED. Метод PrimeOutput для компонента «Source - Sheet0 $» (1) вернула ошибку код 0xC020902A. Компонент вернул код ошибки, когда конвейерный двигатель с именем PrimeOutput (). Значение кода ошибки определяется компонентом, но ошибка фатальна и конвейер перестал исполнять. Там может быть ошибка сообщения, опубликованные до этого с более информация о сбое. (Мастер импорта и экспорта SQL Server)

  * Error 0xc0047021: Data Flow Task: SSIS Error Code

DTS_E_THREADFAILED. Нить «SourceThread0» завершился с ошибкой код 0xC0047038. Там может быть ошибка сообщения, опубликованные до этого с более информация о том, почему поток вышел. (Мастер импорта и экспорта SQL Server)

  * Error 0xc0047039: Data Flow Task: SSIS Error Code

DTS_E_THREADCANCELLED. Нить «WorkThread0» получил отключение сигнал и заканчивается. Пользователь запросил завершение работы или ошибку в другой поток вызывает конвейер выключить. Там может быть ошибка сообщения, опубликованные до этого с более информация о том, почему поток был отменен. (Мастер импорта и экспорта SQL Server)

  * Error 0xc0047021: Data Flow Task: SSIS Error Code

DTS_E_THREADFAILED. Нить «WorkThread0» завершился с ошибкой код 0xC0047039. Там может быть ошибка сообщения, опубликованные до этого с более информация о том, почему поток вышел. (Мастер импорта и экспорта SQL Server)

- Post-execute (Success)
  Messages
  * Information 0x402090df: Data Flow Task: The final commit for the

вставка данных началась. (Мастер импорта и экспорта SQL Server)

  * Information 0x402090e0: Data Flow Task: The final commit for the

вставка данных завершена. (Мастер импорта и экспорта SQL Server)

- Cleanup (Success)
  Messages
  * Information 0x4004300b: Data Flow Task: "component "Destination -

Sheet0 $ "(323)" написал 210 строк. (Мастер импорта и экспорта SQL Server)

Ответы [ 7 ]

15 голосов
/ 29 октября 2011

Когда я получаю ошибки усечения, я вставляю 8 фиктивных строк. Каждая ячейка имеет нежелательный текст длиной> 256. Это заставляет обнаруженный тип данных быть varchar (max) вместо varchar (256). Если строка представляет собой числовой столбец, я должен заполнить ее числом (например, 0), а если это дата, я должен заполнить фиктивную дату, иначе столбцы будут импортированы с нулевыми данными.

Затем я удаляю эти ненужные строки после импорта.

8 голосов
/ 24 июня 2009

В качестве стандартного размера varchar для данных Excel мастер использует меньшее значение, чем вы получили в мастере в SQL Server 2000. В результате он часто усекает данные, которые вы пытаетесь выполнить для быстрого импорта в промежуточную таблицу. Однако, когда вы запустите мастер, один экран спросит вас, хотите ли вы редактировать сопоставления, и вы можете установить размер полей там. Или вы можете использовать сначала создание таблицы для создания рабочей таблицы с нужными размерами (nvarchar (max) хорошо, если вы просматриваете данные в первый раз и не знаете, насколько большими будут поля), а затем импортируете внутрь. В Excel я знаю, что у меня также были проблемы с SQl Server, использующим только несколько строк для определения типа данных, а затем вставка не удалась для записей (скажем, для чего-то вроде partnumber), потому что он думал, основываясь на первых нескольких записях, что это было целое число, когда он был действительно строковый тип данных. Вы также можете столкнуться с подобной проблемой, поэтому в любом случае рекомендуется просмотреть сопоставления, даже если вы не получили ошибок усечения.

5 голосов
/ 01 июля 2013

Вот , что сработало для меня.

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

TypeGuessRows

4 голосов
/ 20 января 2014

http://support.microsoft.com/kb/281517

Чтобы изменить значение TypeGuessRows, используйте эти шаги: 1.В меню «Пуск» нажмите «Выполнить». В диалоговом окне «Выполнить» введите Regedt32 и нажмите кнопку «ОК». 2. Откройте следующий ключ в редакторе реестра:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

Примечание. Для 64-битных систем соответствующий ключ:

HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ струйного \ 4.0 \ Engines \ Excel 3. Дважды щелкните TypeGuessRows. 4.В диалоговом окне редактора DWORD нажмите «Десятичное число» в разделе «База». Введите значение от 0 до 16 включительно для значений данных. 5.Нажмите ОК, а затем закройте редактор реестра. Второй способ обойти эту проблему (без изменения реестра) - убедиться, что строки с полями, которые имеют данные размером 255 или более, присутствуют в первых 8 строках исходного файла данных.

1 голос
/ 14 мая 2013

При случайном импорте Excel, CSV или текстовых данных в SQL Server, где возникают ошибки усечения, я бы предложил сначала импортировать данные в MS Access, а затем с помощью мастера изменения размера создать и заполнить таблицу непосредственно в SQL .

1 голос
/ 24 июня 2009

Почему вы хотите игнорировать ошибки? Почему бы не найти их и не починить?

В любом случае, если вам нужно сделать больше, чем предоставляет мастер, вам следует напрямую использовать службы SSIS (службы интеграции SQL Server). Это то, что использует мастер, только он не может предположить, что ошибки в порядке.

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

0 голосов
/ 12 января 2016

В мастере импорта SQL Server, как только вы попадете в раздел, где вам нужно указать файл, который вы используете для импорта данных, нажмите на «Дополнительные» опции. Это покажет вам все поля во входном файле вместе со свойствами полей. Свойство, которое нужно изменить, - «DataType». Обычно по умолчанию это «string [DT_STR]». Если вы измените его на «текстовый поток [DT_TEXT]», вы существенно увеличите размер поля и, следовательно, скорее всего избежите ошибки усечения.

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