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]
-F [line num]
4. 何行目まで読み込む
-L [line num]
■bcpの制限
1. ダブルクォートに対応しない
データインポートツールを使って、テキスト修飾子に「"」を設定すれば、この問題 を回避できる
2. 空文字はNULLとしてインポートされてしまう
カラムのDEFAULT値を設定すれば、DEFAULT値になるので、回避できる。
0 件のコメント:
コメントを投稿