2013-09-03 2 views
46

Я пытаюсь вставить большой файл CSV (несколько концертов) в SQL Server, но как только я пройду мастер импорта и, наконец, попробую импортировать файл, я получаю следующее сообщение об ошибке:Ошибки в SQL Server при импорте файла CSV, несмотря на использование varchar (MAX) для каждого столбца

  • Выполнение (Error) сообщения 0xc02020a1 Ошибка: Поток данных Задача 1: преобразование данных не удалось. Преобразование данных для столбца «« Название »« возвращало значение статуса 4 и текст состояния »Текст был усечен или один или несколько символов не совпадали на целевой кодовой странице.». (SQL Server мастер импорта и экспорта)

  • 0xc020902a Ошибка: Поток данных Задача 1: "Источник - Train_csv.Outputs [Flat File Source Output] .Columns [" Title "]" не удалось, поскольку произошло усечение, и расположение строки усечения на «Источник - Train_csv.Outputs [Выход файла с плоским файлом]. Колонки [« Заголовок »]« указывает на отказ при усечении. Произошла ошибка усечения на указанном объекте указанного компонента. (SQL Server, мастер импорта и экспорта)

  • Ошибка 0xc0202092: Поток данных Задача 1: Произошла ошибка при обработке файла "C: \ Train.csv" на строке данных 2. (SQL Server, мастер импорта и экспорта)

  • Ошибка 0xc0047038: поток данных Задача 1: код ошибки SSIS DTS_E_PRIMEOUTPUTFAILED. Метод PrimeOutput для Source - Train_csv возвратил код ошибки 0xC0202092. Компонент возвращал код сбоя, когда движок трубопровода назывался PrimeOutput(). Значение кода отказа определяется компонентом, но ошибка является фатальной, и конвейер прекратил выполнение. До этого могут появляться сообщения об ошибках с дополнительной информацией о сбое. (SQL Server мастер импорта и экспорта)

Я создал таблицу, чтобы вставить файл в первый, и я поставил каждую колонку для хранения VARCHAR (MAX), так что я не понимаю, как я могу еще этот вопрос об усечении. Что я делаю не так?

+0

Посмотрите на вторую строку данных. Две вероятные причины - это пустые поля и/или запятые в поле. –

+0

Я проверил вторую строку, и поле в каждом столбце выглядит нормально. Нет пустого, нет NULL, нет запятых. – GMS

ответ

127

В окне мастера импорта и экспорта SQL Server вы можете настроить исходные типы данных на вкладке Advanced (они становятся типами данных вывода при создании новой таблицы, но в остальном используются только для обработки исходных данных).

Типы данных досадно отличаются от типов данных в MS SQL, а не VARCHAR(255) - это DT_STR, а ширина столбца вывода может быть установлена ​​в 255. Для VARCHAR(MAX) это DT_TEXT.

Так, на выбор источника данных, на вкладке Advanced, изменить тип данных каких-либо оскорбительных столбцов из DT_STR в DT_TEXT (Вы можете выбрать несколько столбцов и изменить их все сразу).

Import and Export Wizard - Data Source - Advanced

+1

Похоже, что это сделал трюк после того, как я превысил длину столбца! Большое спасибо – GMS

+0

Кстати, этот трюк также работает в SSIS 2012. спасибо –

+2

Мне пришлось менять столбцы на 'DT_DATE',' DT_NUMERIC' и т. Д. Это была самая утомительная и раздражающая вещь, которую я сделал через некоторое время , Но это лучше, чем создание новой таблицы со всеми столбцами varchar (50). Это действительно не полезно. – Jess

0

Я думаю, что это ошибка, примените обходной путь, а затем повторите попытку: http://support.microsoft.com/kb/281517.

Также перейдите на вкладку «Дополнительно» и подтвердите, что длина столбцов цели - Varchar (max).

+0

Они, безусловно, варчар (MAX). Я также перешел в Advanced и сделал каждый столбец шириной 8000 символов. Теперь я получаю эту ошибку только за последний столбец. – GMS

0

Усовершенствованный редактор не решить мою проблему, вместо этого я был вынужден изменить dtsx-файл через блокнот (или ваш любимый текст/XML редактор) и вручную заменить значения в атрибутах

length="0"dataType="nText" (Я использую unicode)

Всегда делайте резервную копию файла dtsx перед редактированием в текстовом/текстовом режиме.

Запуск SQL Server 2008 R2

0

Goto вкладка ----> тип данных колонки ---> Здесь изменение типа данных от DT_STR до DT_TEXT и ширина колонки 255. Теперь вы можете проверить это будет работать отлично ,

+0

что вкладка «Дополнительно»? Я не вижу такой вкладки –

+0

@Hart CO должен показать изображение мастера подключения, у которого есть расширенная вкладка, которую я предполагаю, что Локеш говорит о – Sam

0

Ошибка: Поставщик Jet OLE DB считывает раздел реестра, чтобы определить, сколько строк должно быть прочитано, чтобы угадать тип исходного столбца. По умолчанию значение этого ключа равно 8. Следовательно, поставщик определяет первые 8 строк исходных данных для определения типов данных для столбцов. Если какое-либо поле выглядит как текст, а длина данных - более 255 символов, столбец вводится как поле memo. Таким образом, если в первых 8 строках источника данных нет данных длиной более 255 символов, Jet не может точно определить характер типа данных. Поскольку первые 8 строк данных на экспортированном листе меньше 255, он рассматривает длину источника как VARCHAR (255) и не может читать данные из столбца с большей длиной.

Fix: Решение только для сортировки колонки в порядке убывания. В 2012 году мы можем обновить значения на вкладке Advance в мастере импорта.

1

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

Чтобы решить эту проблему, в разделе «Выбор источника данных» для поставщика плоских файлов после выбора файла появляется кнопка «Предложить типы ..» под списком столбцов ввода. После нажатия этой кнопки, даже если в диалоговом окне не было внесено никаких изменений, поставщик плоского файла затем повторно запросил исходный файл .csv, а затем правильно определил длины полей в исходном файле.

Как только это было сделано, импорт не иссякнут.

Смежные вопросы