web-dev-qa-db-ja.com

「BCPコピーの失敗」のトラブルシューティング方法

AzureのSQLサーバーデータベースに次のようなテーブルがあります。

CREATE TABLE [dbo].[TableName](
[col01] [int] IDENTITY(1,1) NOT NULL,
[col02] [varchar](255) NOT NULL,
[col03] [varchar](255) NOT NULL,
[col04] [datetime] NULL,
[col05] [datetime] NULL,
[col06] [nvarchar](255) NULL,
[col07] [nvarchar](max) NULL,
[col08] [nvarchar](255) NULL,
[col09] [nvarchar](max) NULL,
[col10] [int] NULL,
[col11] [nvarchar](255) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

次のようなデータファイルがあります。

$ head datafile.csv 
2134024,SRC001,SE,NULL,NULL,NULL,NULL,NULL,NULL,1,SRC
2134025,SRC002,SE,NULL,NULL,NULL,NULL,NULL,NULL,2,SRC
2134026,SRC003,SE,NULL,NULL,NULL,NULL,NULL,NULL,3,SRC
2134027,SRC004,SE,NULL,NULL,NULL,NULL,NULL,NULL,4,SRC
2134028,SRC005,SE,NULL,NULL,NULL,NULL,NULL,NULL,5,SRC
2134029,SRC006,SE,NULL,NULL,NULL,NULL,NULL,NULL,6,SRC
2134030,SRC007,SE,NULL,NULL,NULL,NULL,NULL,NULL,7,SRC
2134031,SRC008,SE,NULL,NULL,NULL,NULL,NULL,NULL,8,SRC
2134032,SRC009,SE,NULL,NULL,NULL,NULL,NULL,NULL,9,SRC
2134033,SRC010,SE,NULL,NULL,NULL,NULL,NULL,NULL,10,SRC
$ wc -l 
713224
$ 

私のLinuxラップトップで実行されているbcpを使用してそれをインポートしようとします。

$ bcp TableName in ./datafile.csv -S niceclouddbservername.database.windows.net -U myusername -dmydatabasename -c -t ','
Password: <I paste my password here>


Starting copy... <this takes a few seconds>

BCP copy in failed
$

2つの質問、1つは現在興味深いものです。

  1. なぜこれが機能しないのですか?
  2. どうすればデバッグできますか?

これまでに行ったこと:

  • 説明を探すためにduckduckgo(および適切な測定にはgoogle)を使用しました
  • ドキュメントをもう一度読んで、他の例を見つけ、さまざまなバリエーションを試しました
  • 最初の10レコードだけで試した
  • データ型が入力と一致することを確認(少なくとも試行)
  • 既知の間違ったパスワードでテストして、別のエラーメッセージが生成されることを確認する
  • 「類似した質問」のリストから、遠隔的に関連していると思われるすべてのものを調べた
2
Erik I

これは、文字データに合わせて調整することをお勧めする方法です。

  1. フォーマットファイルを生成する
  2. 入力データ構造に一致するようにフォーマットファイルを編集する
  3. 手順2で生成されたフォーマットファイルを使用してデータファイルをアップロードする

対応するコマンドは次のとおりです。

  1. bcp [<my_db_name>].<my_schema_name>.<my_table_name> format nul -c -f <my_format_file_name>.fmt -t\<my_delimiter_char> -S <my_db_server> -U <my_db_user>を実行します
  2. エディションが必要な場合は、テキストエディターを使用してください
  3. bcp [<my_db_name>].<my_schema_name>.<my_table_name> in <my_data_file> -f <my_format_file_name>.fmt -t\<my_delimiter_char> -b <my_batch_size> -m <my_max_errors> -e <my_error_file> -S <my_db_server> -U <my_db_user>を実行します

次に、<my_error_file>を調べて、それがどのように行われたかを確認できます。エラーなしで実行すると、空の<my_error_file>が生成されます。

2
meyhane