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

Ошибка "Столбец слишком длинная" с BULK INSERT

Я пытаюсь запустить следующую команду для массовой вставки данных из файла CSV -

 BULK INSERT TestDB.dbo.patent
 FROM 'C:\1patents.csv'
 WITH (FIRSTROW = 1,  FIELDTERMINATOR = '^', ROWTERMINATOR='\n');

Ошибка, которую я получаю, - это

Msg 4866, уровень 16, состояние 1, строка 1
Сбой массовой загрузки невозможен. Столбец слишком длинный в файле данных для строки 1, столбец 6.
Убедитесь, что терминатор поля и ограничитель строк указаны правильно. Msg 7399, уровень 16, состояние 1, строка 1
Поставщик OLE DB "BULK" для связанного сервера "(null)" сообщил об ошибке. Поставщик не предоставил никакой информации об ошибке.
Msg 7330, уровень 16, состояние 2, строка 1
Не удается получить строку из поставщика OLE DB "BULK" для связанного сервера "(null)".

Теперь это данные в первой строке -

 00000001^^18360713^295^4^0

И в таблице последнее поле (соответствует 6-му столбцу данных выше = 0) имеет тип "int".

Что я здесь делаю неправильно? Почему я получаю вышеуказанную ошибку?

4b9b3361

Ответ 1

Я получил извлечение из Oracle/Unix. Я заменил \r\n на ROWTERMINATOR = '0x0a', и это сработало для меня.
Большое спасибо!

Ответ 2

Как и выше, у меня была та же проблема с импортом файла csv в SQL Server. Я использовал ROWTERMINATOR = '\n', и я также попытался использовать '\r\n' и '\r'. Ни один из них не работал.

Но при использовании ROWTERMINATOR = '0x0a' таблица загружается без проблем.

Я не знаю, почему? за этим, надеюсь, кто-то еще может пролить свет на него.

Ответ 3

Если источником файла является Unix, скорее всего, терминатор строки строки действительно

\ г\п

Либо используйте шестнадцатеричный редактор для проверки терминатора файлов, либо просто попробуйте его в качестве ограничителя строк.

Ответ 4

Я столкнулся с подобной проблемой и узнал, что если файл не является типом UNIX \r\n, это нормально.

Когда вы создаете файл формата (.fmt или .xml), обратите внимание на третий столбец слева. его называют минимальной длиной столбца. Время от времени сервер sql по умолчанию имеет значение 2, хотя вы не упоминаете его в create script. Измените это значение на 0. Иногда вам может потребоваться также разрешить NULL, поэтому измените это значение на ноль и оно должно работать сейчас