概要
BCPコマンドを利用してテーブルのレコードをCSVファイルに出力及びテーブルへ登録するコマンドのメモです。
BCPとは?
b ulk c opy p rogram ユーティリティ (bcp) は、Microsoft SQL Server のインスタンスと、ユーザー指定の形式のデータ ファイルとの間でデータの一括コピーを行います。 bcp ユーティリティを使うと、多数の新規行を SQL Server テーブルにインポートしたり、データをテーブルからデータ ファイルにエクスポートしたりできます。 このユーティリティでは Transact-SQL の知識は必要ありません。ただし、 queryout オプションと同時に使う場合はその知識が必要になります。 データをテーブルにインポートするには、そのテーブル用に作成されたフォーマット ファイルを使用するか、テーブルの構造およびテーブルの列に有効なデータの型を理解しておく必要があります。
・参照サイト
https://docs.microsoft.com/ja-jp/sql/tools/bcp-utility?view=sql-server-ver15
bcpによる一括エクスポート
次のコマンドでテーブルのレコードをtsvファイルに保存することが確認できます。
# -d [DB SCHEMA NAME]の指定がない場合
C:\temp>cmd /c "bcp DEV.dbo.members out .\members.tsv -w -S XXX.XXX.XXX.XXX -U userid -P userpw
Starting copy...
2 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 15 Average : (133.33 rows per sec.)
# -d [DB SCHEMA NAME]を指定した場合
C:\temp>bcp dbo.members OUT C:\temp\members.tsv -c -t\t -r\n -S XXX.XXX.XXX.XXX -U userid -P userpw -d DEV
Starting copy...
2 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 16 Average : (125.00 rows per sec.)
■TSVファイルの内容を変更
次の内容にレコード情報を変更します。
bcpによる一括インポート
次のコマンドを利用してTSVファイルの内容をテーブルに登録ができることを確認します。
C:\temp>bcp dbo.members IN C:\temp\members.tsv -c -t\t -r\n -S XXX.XXX.XXX.XXX -U userid -P userpw -d DEV
Starting copy...
2 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 16 Average : (125.00 rows per sec.)
C:\temp>
終わりに
今までCSV、TSVファイルをサーバに配置してからインポートする認識でしたが、このBCPコマンドを利用するとサーバへファイルを配置しなくてもローカルからサーバへ直接インポートできた認識です。
大量のレコードをBCPコマンドからインポートする場合、
列が何個でレコード数何件、TSVファイルはXXXMB,XGBに対してどのくらいかかるか比較もしてみたいですね。
とりあえず今回はBCPコマンドでテーブルのレコードをエクスポートとインポートを確認ができました。
参照サイト
・bcp を使用した一括データのインポートおよびエクスポート (SQL Server)
https://docs.microsoft.com/ja-jp/sql/relational-databases/import-export/import-and-export-bulk-data-by-using-the-bcp-utility-sql-server?redirectedfrom=MSDN&view=sql-server-ver15
・フォーマット ファイルの作成 (SQL Server)
https://docs.microsoft.com/ja-jp/sql/relational-databases/import-export/create-a-format-file-sql-server?view=sql-server-ver15