Bcp: Ошибка = [Microsoft] [Собственный клиент SQL Server 10.0] Строковые данные, правильное усечение

Недавно я столкнулся с ошибкой при работе с bcp. Вот ошибка.

SQLState = 22001, NativeError = 0 Ошибка = [Microsoft] [SQL Server Собственный клиент 10.0] Строковые данные, правильное усечение

Я пытаюсь распаковать данные в промежуточную таблицу, которая не имеет никаких ограничений, и типы данных также довольно велики по сравнению с данными. У меня около 11 файлов из разных таблиц, которые bcp'd и zipped, из которых только один файл при распаковке ошибок. Это команда, которую я успешно использую. Совсем недавно (при попытке сделать копию текущего WH и согласования процесса) я столкнулся с проблемами.

bcp.exe employee_details в employee_details.dat -n -E -S "servername" -U sa -P "Пароль"

Я попытался изменить команды на -C -T -S, которые работали, когда я дал формат вручную. Это очень большой и важный пакет, который мне нужно загрузить в мой WH.
Я не знаю, вижу ли здесь файл формата или нет. Любая помощь нужна.

Спасибо

Девушка с корицей.

Ответ 1

Мы также столкнулись с такой же проблемой при выполнении BCP, и это оказалось проблемой с новым символом строки в файле .dat.

Просмотрите файл в Notepad ++ и нажмите "Показать все символы", чтобы увидеть новый символ строки.

File with LineFeed character

BCP выдает следующую ошибку с параметром -r "\ r\n", т.е. с помощью команды

bcp dbo.Test in C:\Test.dat -c -t "|" -r "\r\n" -S "DBServerName" -T -E

"SQLState = 22001, NativeError = 0 Ошибка = [Microsoft] [SQL Server Собственный клиент 10.0] Строковые данные, правильное усечение"

BCP обрабатывает все строки в файле как одну строку с параметром -r "\n" или -r "\ r", т.е. с помощью команды

bcp dbo.Test in C:\Test.dat -c -t "|" -r "\n" -S "DBServerName" -T -E

Проблема была решена, когда мы использовали Haxadecimal значение (0x0a) для символа New Line в команде BCP

bcp dbo.Test in C:\Test.dat -c -t "|" -r "0x0a" -S "DBServerName" -T -E

Ответ 2

Для нас оказалось, что файл, который мы пытались загрузить, был в Unicode, а не в формате ANSI.

Существует ключ -N, но в наших таблицах не было данных NVARCHAR.

Мы просто сохранили файл в формате ANSI, и он сработал, но если у вас есть данные NVARCHAR или вам может понадобиться использовать ключ -N

См. TechNet - Использование родного формата Unicode для импорта или экспорта данных

Ответ 3

Ошибка bcp right truncation возникает, когда слишком много данных, которые могут быть установлены в один столбец. Это может быть вызвано неправильными файлами формата (если они используются) или разделителем. Терминатор линии (Windows имеет CRLF или "\ r\n", а UNIX имеет "\n" ) также может вызвать эту ошибку. Пример. Файл формата содержит CRLF Windows, т.е. '\ R\n' в качестве ограничителя строк, но файл содержит "\n" в качестве окончаний строки. Это означало бы подгонку всего файла в 1 строку (скорее 1 столбец), что приведет к ошибке ошибки усечения.

Ответ 4

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

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

У моего входного файла не было данных для третьего столбца в таблице. Так выглядел файл формата.

... ","    1 Cust_Name       SQL_Latin1...
... ","    2 Cust_Ref        SQL_Latin1...
... ","    3 Cust_Amount     SQL_Latin1...
... "\r\n" 4 Cust_notes   SQL_Latin1...

Мой входной файл выглядел так:

Jones,ABC123,200.67,New phone 
Smith,XYZ564,10.23,New SIM 

Таблица выглядела как

Cust_Name Varchar(20)
Cust_Ref  Varchar(10)
Cust_Type Varchar(3)
Cust_amount Decimal(10,2)
Cust_Notes Varchar (50)
Cust_Tel   Varchar(15)
Cust......

Я предположил, указав имя столбца в файле формата, что данные перейдут в соответствующий столбец таблицы.

Это, однако, работает, поскольку номер столбца важен, а имя столбца - шум.

... ","    1 A       SQL_Latin1...
... ","    2 B       SQL_Latin1...
... ","    4 C       SQL_Latin1...
... "\r\n" 5 D       SQL_Latin1...

Ответ 5

В моем случае причина была в том, что в одном поле было написано "|" = chr$(124) "|" = chr$(124) и разделитель был в моем случае "|" = chr$(179) "|" = chr$(179).

MS SQL не делает различий между обоими символами. Я удалил chr$(124) а затем импорт по BCP работает нормально.

Ответ 6

Откройте файлы в блокноте ++. GO to View tab- > show symbols- > показать все символы. Я также столкнулся с той же проблемой в .tsv files.one вкладке было неуместно.

Ответ 7

Я знаю, что это старое - но я просто натолкнулся на экземпляр, где я получал эту ошибку, получается, что одно из моих числовых полей имеет больше десятичных знаков, разрешенных схемой.

Ответ 8

Поздно, но все же: в моем случае я точно получил это

SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 11 for SQL Server]String data, right truncation

И проблема была в том, что схема изменилась. В целевой базе данных появилось два новых поля. После того, как я установил предыдущую схему, импорт завершился успешно.

Ответ 9

Потратив 4 часа, потратив кучу ошибок и ошибок, я обнаружил, что решение может быть таким же простым, как таблица, в которую вы импортируете данные, которая должна иметь подходящую схему для файла, который вы пытаетесь импортировать. пример: в моем случае. Я импортировал .csv с 667, aaa, bbb в таблицу со схемами int (4), char (2), char (2), вызывающими строковые данные, правое усечение.