【SQLServer】データのエクスポートとインポート

データのエクスポートとインポートをBCPユーティリティを利用して行います。

bcp データベース名.所有者(初期はdbo).テーブル名 in|out|queryout|format ファイル名 オプション
bcp Test_db.dbo.TestTbl out TestTbl.txt /U ユーザ名 /S サーバ名 /P パスワード /c /t , /r \r\n /q >> exec.log
/c /cを指定しない場合、列ごとにプロンプトでタブや改行を指定する必要がある。
/t /cを指定した場合、デフォルトはタブ区切りになる。変更する場合に指定。
/r /cを指定した場合、デフォルトは\nになる。変更する場合に指定。
/q 空白や単一引用符を含むデータベース名、所有者、テーブル名を指定する場合に指定。
/o bcpコマンド単位でログ出力できる。「>> ファイル名」の方が楽。
/f フォーマット個別指定。/cの方が楽。
   以下がフォーマット。
   8.0
   2
   1 SQLCHAR     0 3 "," 1 USERID Japanese_BIN
   2 SQLDATETIME 0 8 "," 2 DATE   ""

   1行目:バージョン番号
   2行目:列数
   3行目:番号、データ型、プレフィックス長、項目長、終端文字、DB内の項目番号、DB内の項目名、行の照合順序(※1)

※1
照合順序の例
 Japanese_BIN
  大文字、小文字、シングルバイト、ダブルバイト、ひらがな、カタカナを全て区別する
 Japanese_CI_AS
  大文字、小文字、シングルバイト、ダブルバイト、ひらがな、カタカナを全て区別しない

複数テーブルに対して作成する場合、
以下のようなSQL文を準備しておくと汎用性が高くなる。

SELECT 'bcp Test_db.dbo.' + name + ' out ' + name + '.txt /U ユーザ名 /S サーバ名 /P パスワード /c /t "," /r \r\n' FROM sysobjects WHERE type = 'U' ORDER BY name;