DB

SQL Serverのbcpコマンドでフォーマットファイルを利用してみた

bcpコマンドを利用すると、CSVファイルのデータをSQL Serverのテーブルに書き込めるが、その際に利用するCSVファイルの形式を、フォーマットファイルで指定することができる。また、フォーマットファイルを、bcpコマンドで自動生成することもできる。

今回は、bcpコマンドでフォーマットファイルを自動生成すると共に、生成したフォーマットファイルを利用してCSVファイルのデータをSQL Serverのテーブルに書き込んでみたので、その手順を共有する。

前提条件

下記記事のように、SQL Serverでbcpコマンドを利用できること。

SQL Serverでbcpコマンドを利用してみたbcpコマンドを利用すると、SQL ServerのテーブルのデータをCSVファイルに出力したり、逆にCSVファイルのデータをSQL Se...

やってみたこと

  1. フォーマットファイルの作成
  2. フォーマットファイルを利用したCSVインポート

フォーマットファイルの作成

bcpコマンドを利用すると、SQL Serverのテーブルに書き込むためのフォーマットファイルを自動生成できる。その手順は、以下の通り。

なお、フォーマットファイルの形式は、XML形式とXML形式以外の2通りがあるが、今回はXML形式でフォーマットファイルを作成するものとする。

1) create table文を利用して、employeeテーブルを作成する。

フォーマットファイルの作成_1

2) コマンドプロンプトを起動し、bcpコマンドの配置されているディレクトリに移動する。

フォーマットファイルの作成_2_1

 なお、以下の「bcp.exe」が、bcpコマンドになる。
フォーマットファイルの作成_2_2

3) bcpコマンドを利用して、XML形式のフォーマットファイルを作成する。

フォーマットファイルの作成_3

なお、bcpコマンドは、「bcp (テーブル名) format nul -c -x -f (フォーマットファイルパス(XML形式)) -t(区切り文字) -S (ホスト名) -U (ユーザー名) -P (パスワード) -d (データベース名)」という形式で指定している。

また、オプション「-x」を指定することで、作成されるフォーマットファイルがXML形式になる。

4) 3)で出力されたXMLファイルの内容は、以下の通り。
フォーマットファイルの作成_4_1

フォーマットファイルの作成_4_2



「Envader」はLinuxコマンドやDatabase SQL等のスキルを、環境構築不要で習得できる学習サイトだった「Envader」は、ITエンジニアとしてよく使うLinuxコマンドやDatabase SQL等のスキルを、解説を読んだ上で、問題を解き...

フォーマットファイルを利用したCSVインポート

bcpコマンドを利用すると、CSVファイルのデータをSQL Serverのテーブルに書き込めるが、その際にフォーマットファイルを利用することもできる。その手順は、以下の通り。

1) インポートする予定のCSVファイルの内容は、以下の通り。
フォーマットファイルの利用_1

2) employeeテーブルに、カラム「new_col」を追加する。

フォーマットファイルの利用_2

3) インポートする前のemployeeテーブルのデータは、以下の通り。

フォーマットファイルの利用_3

4)「C:\tmp」フォルダ下に、フォーマットファイルとインポートする予定のファイルを配置する。
フォーマットファイルの利用_4

5) コマンドプロンプトを起動し、bcpコマンドの配置されているディレクトリに移動する。

フォーマットファイルの利用_5

6) bcpコマンドでXML形式のフォーマットファイルを利用して、CSVファイルのデータをemployeeテーブルに追加する。

フォーマットファイルの利用_6

なお、bcpコマンドは、「bcp (テーブル名) in (インポートするCSVファイル名) -f (フォーマットファイルパス(XML形式)) -S (ホスト名) -U (ユーザー名) -P (パスワード) -d (データベース名)」という形式で指定している。

7) インポートした後のemployeeテーブルのデータは、以下の通り。

フォーマットファイルの利用_7

要点まとめ

  • bcpコマンドを利用すると、CSVファイルのデータをSQL Serverのテーブルに書き込めるが、その際に利用するCSVファイルの形式を、フォーマットファイルで指定することができる。また、フォーマットファイルを、bcpコマンドで自動生成することもできる。