2011年12月5日

bcpユティリティでSQL Serverデータインポート

SQL Serverのデータインポートは下記2種類の方法があります
 1. SQL Server付属のデータインポート/エクスポートツール
 2. bcpユティリティ
どうも大量データをインポートする場合、データインポートツールが遅くて、代わりにbcpを使ってみました。

インポート手順は下記通り
■インポート先テーブルの準備
 特に注意すべきことはありませんが、NULL/NOT NULLの設定及びDEFAULT値を設定したほうがいいかも。

■bcpフォーマットファイル準備
 まず下記コマンドでテーブル定義からフォーマットファイルを作成
  > BCP [TABLE] FORMAT NUL -c -f XXX.FMT –S [SERVER] –T
 ファイルの中身は下記通り
 _____________________________________________________________
  10.0
  3
  1   SQLCHAR   0   32   "\t"     1   ID       Japanese_CI_AS
  2   SQLCHAR   0   32   "\t"     2   Name     Japanese_CI_AS
  3   SQLCHAR   0   512  "\r\n"   3   Detail   Japanese_CI_AS

 _____________________________________________________________
 1行目はバージョン
 2行目はフィールド数
 3行目以降はフィールド定義
  1列目はフィールド順番
  2列目はデータ型
  3列目はプレフィックス長
  4列目はデータ長
  5列目はターミネータ
  6列目はテーブルのカラム順番
  7列目はカラム名
  8列目は照合順序

 上記生成されたファイルを元に修正
 1. インポートするファイルのフィールド順番に合わせて修正
 2. テーブルにカラムがあり、ファイルにフィールドがない行は削除
 3. テーブルにカラムがない、ファイルにフィールドがある行は下記修正を行う
  2   SQLCHAR   0   512   "\t"   0   Detail Japanese_CI_AS
 4. フィールド順番を1から設定しなおす

■データインポート
 下記コマンドでデータをインポート
  > BCP [TABLE]  IN [IMPORT FILE] –f [FORMAT FILE] –S [SERVER] –T

■bcpオプション
 1. Windows認証
    -T
 2. SQL Server認証
    -U [USER] -P [PASSWORD]

 3. 何行目から読み込む
    -F [line num]
 4. 何行目まで読み込む
    -L [line num]

■bcpの制限
 1. ダブルクォートに対応しない
   データインポートツールを使って、テキスト修飾子に「"」を設定すれば、この問題   を回避できる
 2. 空文字はNULLとしてインポートされてしまう
   カラムのDEFAULT値を設定すれば、DEFAULT値になるので、回避できる。

0 件のコメント:

コメントを投稿