Как узнать, на какое поле SQL 2k5 BCP жалуется при неудачном импорте? - PullRequest
3 голосов
/ 05 октября 2011

Я получаю сообщение об ошибке Error - [Microsoft][SQL Native Client] String data, right truncation примерно 10 раз, прежде чем произойдет сбой импорта в журнале outpu. Ошибка немного неоднозначна, к какому полю она относится. Обычно это не будет проблемой, если набор данных будет действительно в 3-й нормальной форме. Однако набор данных содержит более 125 полей и более 100 000 записей в виде текстового файла с разделителями табуляции. В этом случае будет довольно сложно найти оскорбительные данные. Как определить, какое поле SQL 2k5 BCP жалуется на неудачный импорт? Если бы я мог выяснить, в каком поле происходит ошибка, это очень поможет сузить проблему.

bcp db.dbo.table in "dataset.txt" -f "fmt.table.txt" -S instancename -U user -P password -o log.txt

Да, есть большая история, но я ограничиваю ее этой конкретной проблемой для простоты. В противном случае дальнейшее продвижение потребует другого вопроса. :)

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Добавить пустое сопоставление в файл формата. т.е.

112 SQLCHAR 0 1 "\t" 112 CREDITREPORTADDRINDICATOR   ""

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

1 голос
/ 05 октября 2011

Проблема была обнаружена в 112-м поле, где поле было определено как char (1) и где данные, которые были извлечены, были буквально «», давая длину 2 до каждой записи.Я сделал это, импортировав данные в виде файла с разделителями табуляции в Excel, задав каждое поле как текст (крайне важно, учитывая, что Excel автоматически преобразует поля даты в числовое значение), и установил для квалификатора текста значение «Нет» (другая функция преобразования Excel) иустановите его на листе 1. Я проверяю длину поля каждого элемента в наборе данных на втором листе, используя =len(Sheet1!A1), =len(Sheet1!A2), =len(Sheet1!A3) и т. д. (слава богу, что автозаполнение) и вставляю информацию о Shema на третийлист для сравнения максимальной длины каждого поля =max(Sheet2!A1:A126324). Основная проблема заключается в способе извлечения данных.

Вот как я это сделал, но я чувствую, что это далеко от хорошего способаделать это ....

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