Подтвердить что ты не робот

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

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

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

  • Ошибка 0xc020902a: поток данных Задача 1: "Источник - Train_csv.Outputs [Выход файла с плоским файлом]. Колонки [" Заголовок "]" не удалось, потому что произошло усечение, а расположение строки усечения на "Источник - Train_csv".Outputs [Output Source Output Output].Columns [ "Title" ] "указывает на отказ при усечении. Произошла ошибка усечения на указанном объекте указанного компонента. (Мастер импорта и экспорта 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), поэтому я не понимаю, как я могу все еще иметь эту проблему усечения. Что я делаю неправильно?

4b9b3361

Ответ 1

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

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

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

Мастер импорта и экспорта - Источник данных - Дополнительно

Ответ 2

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

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

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

Ответ 3

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

Кроме того, перейдите на вкладку "Дополнительно" и подтвердите, что длина столбцов цели - Varchar (max).

Ответ 4

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

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

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

Запуск SQL Server 2008 R2

Ответ 5

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

Ответ 6

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

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