Текст был усечен или один или несколько символов не совпадали на целевой кодовой странице, включая первичный ключ в неволе
Я пытаюсь импортировать плоский файл в базу данных целевого сервера sql-сервера oledb.
здесь поле, которое дает мне проблемы:
![enter image description here]()
Вот свойства этого соединения с плоским файлом, в частности поле:
![enter image description here]()
вот сообщение об ошибке:
[Источник - 18942979103_txt [424]] Ошибка: сбой передачи данных. преобразование данных для столбца "имя получателя" возвращаемое значение статуса 4 и текст статуса "Текст был усечен или один или несколько символов не имели соответствие на целевой кодовой странице.".
Что я делаю неправильно?
Ответы
Ответ 1
Я знаю, что это старый вопрос. Способ, которым я решил это - после неудачи, увеличив длину или даже изменив текст типа данных, создал файл xlsx и импортировал его. Он точно обнаружил тип данных вместо того, чтобы устанавливать все столбцы как varchar (50). Выключает nvharchar (255), чтобы этот столбец тоже сделал это.
Ответ 2
Вот что поставило проблему для меня. Мне не нужно было конвертировать в Excel. Просто изменил DataType при выборе источника данных на "текстовый поток" (рис. 1). Вы также можете проверить диалоговое окно "Редактировать сопоставление", чтобы проверить изменение размера (рисунок 2).
Рисунок 1
![введите описание изображения здесь]()
Рисунок 2
![введите описание изображения здесь]()
Ответ 3
Я решил эту проблему, ЗАКАЗЫВАЯ мои исходные данные (xls, csv, что угодно), такие, что самые длинные текстовые значения находятся в верхней части файла. Excel замечательный. используйте функцию LEN() в своей сложной колонке. Заказывайте значение этой длины с самым длинным значением в верхней части вашего набора данных. Сохранить. Повторите попытку импорта.
Ответ 4
SQL Server может предложить правильный тип данных для вас (даже если он по умолчанию не выбирает правильный тип) - нажатие кнопки "Предложить типы" (показано на скриншоте выше) позволяет вам иметь SQL Server сканируйте источник и предложите тип данных для поля, которое выдает ошибку. В моем случае, выбрав для сканирования 20000 строк для создания предложений и использования результирующего предложенного типа данных, исправлена проблема.
Ответ 5
Импорт данных SQl Management Studio просматривает первые несколько строк для определения спецификаций исходных данных.
сдвиньте свои записи так, чтобы самый длинный текст был наверху.
Ответ 6
У меня была похожая проблема с двумя разными базами данных (DB2 и SQL), и наконец я решил ее, используя CAST
в исходном запросе от DB2. Я также использую запрос, адаптируя исходный столбец к varchar
и избегая ненужных пробелов:
CAST(RTRIM(LTRIM(COLUMN_NAME)) AS VARCHAR(60) CCSID UNICODE
FOR SBCS DATA) COLUMN_NAME
Важным вопросом здесь является преобразование CCSID.
Ответ 7
В то время как подход, предложенный выше (@chookoos, здесь, в этом д и с обращенным в книги Excel) и импорта решает эти виды вопросов, это решение это решение в другом д & а отлично подходит, потому что вы можете остаться с CSV или TSV или текстовый файл, и perfom необходимая тонкая настройка без создания решения Microsoft, связанного с продуктом
![enter image description here]()
Ответ 8
Не совсем техническое решение, но импорт плоских файлов в SQL Server 2017 полностью обновлен, и я импортировал мой крупноформатный файл с 5 щелчками мыши, обработал проблемы с кодированием/длиной поля без какого-либо участия со стороны меня
![enter image description here]()
Ответ 9
Я решил это, установив флажок "UNICODE". Нажмите на ссылку ниже изображения:
![Image]()
Ответ 10
Ничто из этого не помогло мне. Я РЕШИЛ свою проблему, сохранив исходные данные (сохраните как) файл Excel как один рабочий лист xls Excel 5.0/95 и импортированный без заголовков столбцов. Кроме того, я создал таблицу заранее и сопоставил вручную, а не позволял SQL создавать таблицу.
Ответ 11
Обычно это происходит из-за того, что в диспетчере соединений он по-прежнему составляет 50 символов, поэтому я решил проблему, перейдя в раздел "Соединение Manager--> Дополнительно" и затем изменив значение на 100 или на 1000, если оно достаточно большое