Устранение ошибок BCP и форматирования файловых ошибок - PullRequest
0 голосов
/ 29 июня 2018

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

Я унаследовал процесс массового импорта, используя файл формата (.fmt) на моей новой работе. Этот процесс был создан парнем, который работал здесь до меня, и моя работа - изучить этот процесс (и исправить его сейчас). У меня ограниченные знания об этом, но я провел некоторые исследования. Через несколько недель я никуда не попал. Вот с чем я работаю ...

- Команда BCP для импорта данных из C: \ Desktop \ 20180629_2377167_PR_NP.txt в таблицу LA_Temp.dbo.ProvReg

bcp LA_Temp.dbo.ProvReg IN C: \ Desktop \ 20180629_2377167_PR_NP.txt -f C: \ Desktop \ PROVREG.FMT -T -S SERVERNAME -k -m 1000000

- Структура таблицы, из которой создается файл формата:

SELECT [NPI]
  ,[D1]
  ,[EntityType]
  ,[D2]
  ,[ReplaceNPI]
  ,[D3]
  ,[ProvName]
  ,[D4]
  ,[MailAddr1]
  ,[D5]
  ,[MailAddr2]
  ,[D6]
  ,[MailCity]
  ,[D7]
  ,[MailState]
  ,[D8]
  ,[MailZip]
  ,[D9]
  ,[MailCountry]
  ,[D10]
  ,[MailPhone]
  ,[D11]
  ,[MailFax]
  ,[D12]
  ,[LocAddr1]
  ,[D13]
  ,[LocAddr2]
  ,[D14]
  ,[LocCity]
  ,[D15]
  ,[LocState]
  ,[D16]
  ,[LocZip]
  ,[D17]
  ,[LocCountry]
  ,[D18]
  ,[LocPhone]
  ,[D19]
  ,[LocFax]
  ,[D20]
  ,[Taxonomy1]
  ,[D21]
  ,[Taxonomy2]
  ,[D22]
  ,[Taxonomy3]
  ,[D23]
  ,[OtherProvID]
  ,[D24]
  ,[OtherProvIDType]
  ,[D25]
  ,[ProvEnumDate]
  ,[D26]
  ,[LastUpdate]
  ,[D27]
  ,[DeactivateRC]
  ,[D28]
  ,[DeactivateDate]
  ,[D29]
  ,[ReactivateDate]
  ,[D30]
  ,[Gender]
  ,[D31]
  ,[License]
  ,[D32]
  ,[LicenseState]
  ,[D33]
  ,[AuthorizedContact]
  ,[D34]
  ,[ContactTitle]
  ,[D35]
  ,[ContactPhone]
  ,[D36]
  ,[PanelOpen]
  ,[D37]
  ,[Language1]
  ,[D38]
  ,[Language2]
  ,[D39]
  ,[Language3]
  ,[D40]
  ,[Language4]
  ,[D41]
  ,[Language5]
  ,[D42]
  ,[AgeRestrict]
  ,[D43]
  ,[PCPMax]
  ,[D44]
  ,[PCPActual]
  ,[D45]
  ,[PCPAll]
  ,[D46]
  ,[EnrollInd]
  ,[D47]
  ,[EnrollDate]
  ,[D48]
  ,[FamilyOnly]
  ,[D49]
  ,[SubSpec1]
  ,[D50]
  ,[SubSpec2]
  ,[D51]
  ,[SubSpec3]
  ,[D52]
  ,[ContractName]
  ,[D53]
  ,[ContractBegin]
  ,[D54]
  ,[ContractEnd]
  ,[D55]
  ,[Parish1]
  ,[D56]
  ,[Parish2]
  ,[D57]
  ,[Parish3]
  ,[D58]
  ,[Parish4]
  ,[D59]
  ,[Parish5]
  ,[D60]
  ,[Parish6]
  ,[D61]
  ,[Parish7]
  ,[D62]
  ,[Parish8]
  ,[D63]
  ,[Parish9]
  ,[D64]
  ,[Parish10]
  ,[D65]
  ,[Parish11]
  ,[D66]
  ,[Parish12]
  ,[D67]
  ,[Parish13]
  ,[D68]
  ,[Parish14]
  ,[D69]
  ,[Parish15]
  ,[D70]
  ,[PCPInd]
  ,[D71]
  ,[DisplayOnline]
  ,[D72]
  ,[ExpAgeRestrict]
  ,[D73]
  ,[Suffix]
  ,[D74]
  ,[Title]
  ,[D75]
  ,[PrescriberInd]
  ,[Spaces]
  ,[End]

ОТ [LA_Temp]. [Dbo]. [ProvReg]

- Пример данных текстового файла (это одна строка) 9999999999 ^ 0 ^ ^ ^ 3800 HMA BLVD STE 305 ^ ^ METAIRIE ^ LA ^ 70006 ^ ^ 5048729679 ^ ^ 3800 HMA BLVD ^ ^ METAIRIE ^ LA ^ 70006 ^ ^ 9999999999 ^ ^ 207Q00000X ^ ^ ^ 000000000 ^ ^ ^ ^ 00000000 ^ ^ 00000000 ^ 00000000 ^ F ^ ^ LA ^ ^ ^ ^ N ^ 1 ^ 0 ^ 0 ^ 0 ^ 0 ^ 2 ^ 00000 ^ 00000 ^ 00000 ^ ^ ^ ^ ^ ^ ^ 000000000000000000000000000000 ^ 00000000 ^ 00000000 ^ 26 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 0 ^ 0 ^ Принимаются пациенты в возрасте 000-000 ^ ^ MD ^ ^

- Формат файла

11,0

153

1 SQLCHAR 0 40 "\ t" 1 NPI SQL_Latin1_General_Pref_CP1_CI_AS

2 SQLCHAR 0 2 "\ t" 2 D1 SQL_Latin1_General_Pref_CP1_CI_AS

3 SQLCHAR 0 2 "\ t" 3 EntityType

... вплоть до ...

153 SQLCHAR 0 2 "\ r \ n" 153 Конец

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

Вот проблема, с которой я сталкиваюсь: При использовании «\ t» в файле формата, который я только что создал из таблицы SQL, я получаю ошибку: [Microsoft] [Собственный клиент SQL Server 11.0] В файле данных BCP обнаружен непредвиденный EOF.

Если я поменяю это просто на "" или "^" (как мне кажется, так должно быть, поскольку текстовый файл использует разделитель моркови), строки начали копироваться с ошибкой [Microsoft] [Собственный клиент SQL Server 11.0] Строковые данные, усечение справа SQLState = 22001, NativeError = 0. Ошибка копирования BCP.

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

1 Ответ

0 голосов
/ 14 сентября 2018

попробуйте добавить опцию -e в команду bcp. это даст вам файл с ошибкой, в котором BCP запишет несколько строк samlpe из файла, с которым у него были проблемы. Очень полезно для устранения типа ошибки, которую вы получаете сейчас (вы правильно изменили разделитель в файле формата).

Ошибка, которую вы получаете сейчас, «строковые данные» и «усечение», такова, как она заявляет. Однако это усечение может происходить по ряду причин. Столбцы таблицы назначения могут быть недостаточно большими для хранения данных, которые содержатся между определенными разделителями полей. В ваших данных могут появляться разделители, поэтому утилита bcp может ввести в заблуждение тот факт, что столбец закончился до того, как он должен был завершиться в файле (это менее вероятно при использовании разделителя, который вы используете ... но вы никогда не знаете ... Я всегда предпочитаю фиксированную ширину, если это возможно.) И, конечно же, источник данных, возможно, очень хорошо написал вам файл, который противоречит тому, что было согласовано со спецификацией, заставившей вас определить пункт назначения так, как вы.

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

BCP table_dest IN "C: \ FILE.TXT" -S SVR -T -f "C: \ FORMAT_FILE.txt" -e "C: \ ERROR_FILE.txt"

«error_file.txt» будет содержать номера строк и образец строк, которые он не может обработать. Просто скопируйте и пройдите, чтобы найти файл, который вы пытаетесь загрузить, чтобы убедиться в этом.

Настоятельно рекомендуем использовать более продвинутый инструмент для редактирования текста. Не используйте блокнот Windows или WordPad. Используйте что-то вроде блокнота ++ или ultraedit для проверки текстовых файлов ascii.

...