bcpユーティリティを使用したデータのインポート/エクスポートについて


はじめに

ローカルのSQLServerにデータをインポート/エクスポートする際に使用したbcpユーティリティについて、備忘のためにまとめています。

bcpユーティリティとは?

Microsoft SQL Serverの一括コピープログラム(BCP)APIを使用するコマンドラインツールのことです。
(参考) https://docs.microsoft.com/ja-jp/sql/tools/bcp-utility?view=sql-server-ver15

次のタスクが実行可能です。

  • SQLServerテーブルからデータファイルへのデータの一括エクスポート
  • クエリからのデータの一括エクスポート
  • データファイルからSQLServerテーブルへのデータの一括インポート
  • フォーマットファイルの生成

使用例 (約15000件のテストデータをインポート/エクスポート)

インポート

bcp User in ~/Desktop/users.dat -N -U "user" -P "password" -S 127.0.0.1 -b 1000

bcp テーブル名またはクエリ in/out/queryout/format 〜が基本の書き方となります。
テーブル名/クエリの後にどのタスクを実行するかを指定します。

実行タスク 説明
in data_file ファイルからデータベース テーブルまたはビューへのコピーを行う。
out data_file データベース テーブルまたはビューからファイルへのコピーを行う。
queryout data_file クエリからのコピーを行う。データをクエリから一括コピーする場合にのみ指定する必要がある。
format nul 指定されたオプション(-n、-c、-w、-N) と、テーブルやビューの区切り記号に基づいてフォーマットファイルを作成する。フォーマットファイルの作成についてはこちらをご参照ください。

その他のオプションは以下の通りです。

オプション 説明
-N 文字以外のデータについてはデータベースのネイティブなデータ型を使用し、文字データについては Unicode 文字を使用して、一括コピー操作を実行する。フィールドごとにファイルストレージ型を確認するプロンプトが表示されず、よしなに型を判断してくれる。
-U login_id SQLServerへの接続に使用されるログインIDを指定する。
-P password ログインIDのパスワードを指定する。
-S server_name サーバー名を指定する。
-b batch_size 何行分のデータを1トランザクションとして扱うかを指定する。今回は1000を指定。

実行した結果、962ms.でインポートが完了しました。

エクスポート

bcp "select * from User" queryout ~/Desktop/users.dat -N -U "user" -P "password" -S 127.0.0.1

今回はqueryoutを指定してクエリを用いたエクスポートを実行しました。
実行した結果、84ms.でエクスポートが完了しました。

参考リンク