DB

【SQL Server】bcpコマンドでデータをエクスポート/インポートする方法

SQL Serverに対して大量のデータを高速にインポートする方法として、「bcpユーティリティ」を使う方法があります。
bcpはWindowsのコマンドプロンプトからコマンドを実行することで利用できます。

この記事ではbcpの使い方をまとめます。

エクスポート

基本的な構文は下記の通りです。ファイルはテキストファイルとして保存します。

構文

bcp テーブル名 out 保存先パス -c -S サーバー名 -U ユーザ名 -P パスワード -d データベース名

(例)bcp Person out "Person.txt" -c -S ServerName -U UserName-P PassWord -d DbName

上記の例ではテーブルのデータすべてをエクスポートします。
特定のデータのみエクスポートしたい場合は、下記のようにSELECT文を記述します。

(例)bcp "SELECT * FROM Person WHERE Age >= 30" queryout "Person.txt" -c -S ServerName -U UserName-P PassWord -d DbName

テーブル名をSELECT文にし、out を queryout にすることで、特定のデータをエクスポートできます。

インポート

基本的な構文は下記の通りです。

構文

bcp テーブル名 in インポートファイルパス -c -S サーバー名 -U ユーザ名 -P パスワード -d データベース名

インポートファイルは列をタブ区切りのテキストファイルである前提です。
インポートファイルはbcpでエクスポートするか、テキストファイルにSSMSからコピペしてもOKです。

(例)ID, Name, Age の3列のPersonテーブル
1 永野芽衣 21
2 本田翼 28
3 戸田恵梨香 32

(例)bcp Person in "Person.txt" -c -S ServerName -U UserName-P PassWord -d DbName

実行して、「○行コピーされました。」とメッセージが返れば成功です。

環境に応じたオプションの変更

文字コード

テキストファイルの文字コードによって、オプションを変更する必要があります。

Shift-JIS

Shift-JIS の場合は、-c のままでOKです。

Unicode(UTF-16)

UTF-16 の場合は、-c を -w にする必要があります。

(例)bcp Person in "Person.txt" -w -S ServerName -U UserName-P PassWord -d DbName

UTF-8

UTF-8 の場合は、bcp では利用することができません。
そのため、UTF-16 か Shift-JIS に変換する必要があります。

SQL Server 認証 / Windows 認証

SQL Server 認証の場合は、上記の構文の通りでOKです。

Windows 認証の場合は、-U と -P は必要なく、-T を使います。

 (例)bcp Person in "Person.txt" -c -S ServerName -T -d DbName 

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です