BCPおよびフォーマットファイルエラーのトラブルシューティング

bcp format sql sqlbulkcopy

質問

まず、長いポストのために申し訳ありません。私は私の例/データで徹底したいと思っていました。この投稿の大部分はちょうどそのものです。

私は新しい仕事でフォーマットファイル(.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]

FROM [LA_Temp]。[dbo]。[ProvReg]

- テキストファイルデータの例(これは1行です)9999999999 ^ 0 ^ ^ ^ 3800 HMA BLVD STE 305 ^ ^ METAIRIE ^ LA ^ 70006 ^ ^ 5048729679 ^ ^ 3800 HMA BLVD ^ ^ METAIRIE ^ LA ^ 70006 ^ ^ 9999999999 ^ ^ 207Q00000X ^ 00000000 ^ 00000000 ^ 00000000 ^ F ^ ^ LA ^ ^ ^ N ^ 1 ^ 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終了

セキュリティを維持するために、ディレクトリ、サーバー名、およびテキストファイルの一部のデータを変更しましたが、これは非常に似ています。

ここで私が遭遇している問題があります:SQLテーブルから作成したフォーマットファイルで "\ t"を使用すると、エラーが発生します:[Microsoft] [SQL Serverネイティブクライアント11.0] BCPデータファイルで予期しないEOFが発生する。

これを単に ""または "^"に変更すると(テキストファイルにニンジンデリミタが使用されているはずだと思うので)、[Microsoft] [SQL Server Native Client 11.0]の文字列データ、右切り捨てSQLState = 22001、NativeError = 0. BCPコピーが失敗しました。

もし誰かがこの問題のトラブルシューティングのために正しい方向に私を指差してくれれば、またはあなたが何か不安を感じたら、私に知らせてください。私が言及したように、私はしばらくこの状態にいて、私が得ることができる提案を使用することができます。残念ながら私の会社にはこれについて尋ねることはできません。

人気のある回答

bcpコマンドに-eオプションを追加してみてください。これにより、BCPが問題のあるファイルからいくつかのsamlpe行を書き込むエラーファイルが生成されます。現在入手しているエラーのタイプのトラブルシューティングに非常に役立ちます(フォーマットファイルで区切り文字を変更するのは間違いありません)。

現在、「文字列データ」と「切り捨て」というエラーは、それが示すとおりです。しかし、この切り詰めは、いくつかの理由で発生する可能性があります。宛先テーブルの列は、定義されたフィールド区切り文字の間に含まれるデータを保持するのに十分なほど大きくない場合があります。あなたのデータにデリミタが現れている可能性があります。そのため、bcpユーティリティは、ファイル内で終了する前にカラムが終了したと考えてしまうことがあります(これは、使用しているデリミタではありません...しかし、 ...私はいつも可能ならば固定幅を好みます。)。そして、もちろん、データのソースは、あなたが持っているようにあなたの目的地を定義するために導かれた仕様に矛盾するファイルをあなたに書いているかもしれません。

エラーは正確ですが、どこで何を見つけるのかが分かりません。 BCPが問題のある行をキャプチャできるようにするには、-eオプションを使用します。

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

"error_file.txt"には行番号が含まれ、処理できなかった行のサンプルが含まれます。ちょうどコピーし、あなたがあなた自身のために見るためにロードしようとしているファイルを見つける過去。

より高度なテキスト編集ツールを使用することを強くお勧めします。メモ帳やワードパッドを使用しないでください。 ASCIIテキストファイルを検査するには、notepad ++やultraeditのようなものを使用します。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ