Импорт ошибок усечения в SQL Server 2005 из Excel
Короче говоря, я беру кучу excel-документов один за другим и импортирую их с помощью мастера импорта/экспорта в базу данных SQL Server 2005.
Здесь один отчет (все процессы, которые не показаны, являются "Успехом" ). Есть ли способ игнорировать ошибки усечения? Я googled вокруг безрезультатно или, по крайней мере, не в моей версии.
- 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)
Ответы
Ответ 1
Мастер использует меньшее значение в качестве стандартного размера varchar для данных Excel, чем вы получили в мастере в SQL Server 2000. В результате он часто обрезает данные, которые вы пытаетесь сделать быстрый импорт в промежуточную таблицу. Однако, когда вы выполняете мастер, на одном экране вы спросите, хотите ли вы редактировать сопоставления, и вы можете исправить размер полей там. Или вы можете сначала создать таблицу stament, чтобы создать рабочую таблицу с требуемыми размерами (nvarchar (max) хорош, если вы впервые просматриваете данные и не представляете, насколько большими будут поля), а затем импорт внутрь. С Excel я знаю, что у меня также были проблемы с сервером SQl, используя только несколько строк, чтобы определить тип данных, а затем вставка не работает для записей (скажем, для чего-то вроде partnumber), потому что, по его мнению, на основе первых нескольких записей это целое число, когда оно был действительно строковым типом данных. У вас также может быть проблема, подобная этой, так что это хорошая идея, чтобы просмотреть сопоставления в любом случае, даже если вы не получите ошибки усечения.
Ответ 2
Когда я получаю ошибки усечения, я вставляю 8 фиктивных строк. Каждая ячейка имеет нежелательный текст длиной > 256. Это заставляет определяемый тип данных быть varchar (max) вместо varchar (256). Если строка - это числовой столбец, я должен заполнить ее числом (например, 0), и если это дата, я должен заполнить фиктивную дату, иначе столбцы будут импортированы с нулевыми данными.
Затем я удаляю эти нежелательные строки после импорта.
Ответ 3
Вот, что сработало для меня.
Это связано с замечательной настройкой в Excel в вашем реестре, которая сообщает ему проверять только первые 8 строк данных в вашей электронной таблице, чтобы определить размер столбца для остальной части всех данных. Исправить это - изменить свой реестр, чтобы установить его с 8 на 0. Когда его значение равно 0, он проверит всю электронную таблицу. Это может вызвать некоторые проблемы с производительностью во время первоначального импорта данных, если файл чрезвычайно велик. Вот раздел реестра для поиска (может быть более одного, которое необходимо установить):
TypeGuessRows
Ответ 4
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 включительно для данных Value.
5.Щелкните OK, а затем выйдите из редактора реестра.
Второй способ обойти эту проблему (без изменения реестра) состоит в том, чтобы убедиться, что в первых 8 строках исходного файла данных присутствуют строки с полями, имеющими данные 255 символов или более.
Ответ 5
Почему вы хотите игнорировать ошибки? Почему бы не найти их и не исправить?
В любом случае, если вам нужно сделать больше, чем предоставляет мастер, вы должны напрямую использовать службы SSIS (SQL Server Integration Services). То, что использует мастер, только он не может предположить, что ошибки в порядке.
Очень просто написать пакет SSIS для обработки файлов Excel и импортировать их по одному. Поток данных импорта может быть сконфигурирован либо для игнорирования ошибок, либо для выполнения чего-то еще с ними, например, для отчета.
Ответ 6
Для случайного импорта Excel, CSV или текстовых данных в SQL Server, где возникают ошибки усечения, я бы предложил сначала импортировать данные в MS Access, а затем использовать мастер масштабирования для создания и заполнения таблицы непосредственно в SQL.
Ответ 7
В Мастере импорта SQL Server, как только вы попадете в раздел, где вам нужно указать файл, который вы используете для импорта данных, нажмите "Дополнительно". Это покажет вам все поля в вашем исходном файле вместе с свойствами поля. Свойство, которое вам нужно изменить, это "DataType". Обычно по умолчанию используется "string [DT_STR]". Если вы измените его на "текстовый поток [DT_TEXT]", вы значительно увеличите размер поля и, следовательно, скорее всего избежите ошибки усечения.