Продолжайте получать ошибку импорта "Строковые данные, правильное усечение", используя BCP - PullRequest
0 голосов
/ 06 ноября 2018

Я столкнулся с проблемой. Я пытаюсь использовать BCP для импорта около 700 000 записей в рабочую таблицу.

Это SQL, который я использую для создания моей рабочей таблицы:

If Exists (Select * From sys.tables Where [name] = 'InactiveIDs')
    Begin 
        Drop Table [dbo].[InactiveIDs]
    End

Create Table [dbo].[InactiveIDs] (
    ContactId UniqueIdentifier Not Null,
    ID Varchar(50),
    EmailAddress VarChar(255) Not Null
)

Create Index IX_ContactIdEmailAddress
    On [dbo].[InactiveIDs] (ContactId, EmailAddress)

Вот файл формата файла:

13.0
3
1       SQLUNIQUEID         1       36      ","        1     ContactId                    ""
2       SQLCHAR             2       50      ","        2     ID                           SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR             2       255     "\r\n"     3     EmailAddress                 SQL_Latin1_General_CP1_CI_AS

Вот некоторые примеры данных:

CBD60121-C5E1-E511-B2B4-005056820129,199e6799e3c64b06a87e86a5047e5f41,someone@verizon.com
3D22A4C2-507B-E411-99C7-005056820126,76410ce5beab4a7da943b95b3de3b0c1,someone@gmail.com
AE5B9335-B126-E611-ABF2-005056820020,e7d181abdf154f79b5dcaa4d64fec7f7,someone@yahoo.com
93F94F65-FA2A-E311-87A7-005056B5025F,3e2fae28cace4f068fa670879d7807e3,someone@juno.com
0A41305C-C087-E411-A37D-00505682001E,55b0162742b04a369c1c57d8d917d45c,someoneelse@yahoo.com

Вот моя командная строка:

bcp.exe dbo.InactiveIDs in InactiveIDs.csv -f InactiveIDs.bcp.fmt -T -S SqlServerName -d DatabaseName

Вот вывод:

Starting copy...
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]String data, right truncation

BCP copy in failed

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

В официальном документе Microsoft объясняется, из чего состоит Файл в формате не-XML . Я вижу две возможные проблемы с вашей, оба с первым полем:
1. Столбец 4 (длина данных файла хоста) должен быть 37, если вы открываете страницу, объясняющую каждый тип данных, и переходите на uniqueidentifier, там написано 37 - теперь я копирую значения из ваших примеров данных до первой запятой в Блокнот и они длиной 37 символов.
2. Возможно, тип SQLUNIQUEID также неверен и должен быть SQLCHAR. Документ говорит для столбцов 2 и 3, что они должны быть такими же, как те, которые использовались для извлечения. Я не знаю, было ли извлечение сделано с собственным типом данных, но мне кажется, что первое поле также является текстовым. Так что, если пункт 1. модификация все еще терпит неудачу, я бы попробовал SQLCHAR с нулевой длиной префикса для всех полей.

0 голосов
/ 07 ноября 2018

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

  1. Ваши размеры столбцов кажутся адекватными. Однако это только с примерами данных, которыми вы поделились. Если это очень большой файл, возможно, что некоторые другие значения длиннее, чем ваш образец? Завершает ли ППГ какие-либо партии? (Вы видите "1000 записей написано ..." снова и снова?)
  2. Возможно, проблема с разделителями. Если указанные вами разделители (разделители столбцов или строк) не совпадают с тем, что на самом деле содержится в файле ... тогда SQL Server / BCP будет продолжать принимать данные до тех пор, пока не найдет разделитель, который вы указали искать. Вы, кажется, используете запятые, и у ваших примеров данных есть они ... но терминатор строки? Вы уверены, что это CRLF? Иногда я вижу файлы только с LF или даже с каким-то другим нечетным, невидимым управляющим символом.
  3. Независимо от того, что вы найдете, имея в виду 1 и 2 выше, вы должны включить файл ошибок, используя опцию -e. Это очень удобный вывод, который даст вам номера строк и данные из любых строк, нарушающих работу. Возвращает только первые 10 строк с ошибками.

Я предполагаю, что у вас есть некоторые большие значения, чем вы видите в своем примере. Вы также можете попробовать вставить ваш образец в новый файл ... только эти строки и попробовать загрузить его. Если это сработает, то вы поместите в файл некоторые данные, которые ваша архитектура не ожидает. Вероятно, это или у вас есть нечетный терминатор строки. У вас есть хороший просмотрщик текстовых файлов? Тот, который показывает управляющие символы, которые обычно скрыты в основном «блокноте» в Windows?

...