Не удается определить причину ошибок BULK INSERT - PullRequest
2 голосов
/ 06 октября 2011

Я пытаюсь выполнить этот запрос (я также пробовал его без указания FIELDTERMINATOR и ROWTERMINATOR).Он использует файл данных, который я вручную создаю (не с помощью bcp out).

BULK INSERT FS.dbo.Termination_Call_Detail
FROM 'C:\Termination_Call_Detail__1317841711.dat'
WITH
(
 FORMATFILE = 'C:\Termination_Call_Detail__update_TerminationCallDetailData.fmt',
 FIELDTERMINATOR = '\t',
 ROWTERMINATOR = '\r\n'
)

Я получаю сообщения об ошибках:

Номер сообщения сервера = 4864 серьезность = 16состояние = 1 строка = 1 сервер = USA109MSSQL1A
text = ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 1, столбец 9 (RouterCallKey).

номер сообщения сервера =Уровень важности 4832 = состояние 16 = 1 строка = 1 сервер = USA109MSSQL1A
текст = Массовая загрузка: в файле данных обнаружен непредвиденный конец файла.

Номер сообщения сервера = 7399 уровень серьезности = 16 состояние = 1line = 1 server = USA109MSSQL1A
text = Поставщик OLE DB "BULK" для связанного сервера "(null)" сообщил об ошибке.
Поставщик не предоставил никакой информации об ошибке.

Номер сообщения сервера = 7330 серьезность = 16 состояние = 2 строки = 1 сервер = USA109MSSQL1A
text = Невозможно извлечь строку из поставщика OLE DB "BULK" для связанного сервера "(null)".

Я пытаюсь заставить его работать только с одной строкой.

Файл данных ASCII:

611658275664    1                       5027    5001    5005    5010    2011-10-05 14:53:44     1317840824      240     2011-10-05 14:54:04     1317840844      150026  211     2       1       4480    21543   28      0       29      0       0       0       0       29      0       0                       0       IPT_Call        TAC_Rollover                                                                    424755/4        N       0       5030    5000    2865                    805336626                       2674794299      N                                               1       3       N       0               0

Шестнадцатеричный дамп файла данных: http://pastebin.com/grnwQrdT

Формат файла: http://pastebin.com/WwSQvCGg

Схема таблицы: http://pastebin.com/gFjp4xYy

Эта вставка использует 66 столбцов;таблица содержит 84 столбца.Если я создаю файл форматирования с bcp всей таблицы и файлом данных этой же строки, я могу без проблем запустить этот BULK INSERT QUERY.

Шестнадцатеричный дамп файла данных, созданного bcp в той же строкеданных (со всеми столбцами): http://pastebin.com/MpMk6iq4

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

Я также не могу представить, почему он жалуется на это конкретное поле (RouterCallKey) - над ним есть другие поля в файле формата, которыеодного типа (например, RouterCallKeyDay).

Спасибо!

1 Ответ

0 голосов
/ 06 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...