無気力生活 (ノ ´ω`)ノ ~゜

脱力系エンジニア。てきとーに生きてます。

SQLServer 2005でのCSVインポート・エクスポート

bcpコマンドでCSVファイルへの出力が可能らしいっす。(2008はどうなんでしょ?できそうな気はしますが。)
SQLServerをデフォルトインストールすると、\Microsoft SQL Server\90\Tools\Binnにいます。
わざわざディレクトリ移動して実行するのは面倒くさいのでパス通しておきましょう。(パスの通し方はググればすぐ見つかります)

□エクスポート
bcp テーブル名 out 出力ファイル名(拡張子=csv) -U ユーザー名 -P パスワード -f フォーマット指定ファイル名(拡張子=fmt) (-o ログファイル名(拡張子=log))
※ログファイル名の指定は必要なら行う 自分の環境では指定すると動作しなくなりましたorz

  • fオプションを指定しない場合、対話的に出力フォーマットの指定ができますが、1カラムずつフォーマットの指定をする必要があり、カラム数が膨大になると「マジやってられっか!ふじこふじこ」状態になるんで、おとなしくフォーマット指定ファイルを作りましょう。

□フォーマット指定ファイルの書式
7.0         バージョン
3        カラム数
1 SQLCHAR 0 8 "," 1 user_id    ┐
2 SQLCHAR 0 255 "," 3 user_name ├ データ部
3 SQLCHAR 0 8 "\r\n" 2 age   ┘

○データ部の書式
1列目:CSVファイル内での順序
2列目:データ型
3列目:プレフィックスの長さ
4列目:データ長
5列目:区切り文字
6列目:データベース内での順序
7列目:カラム名

□インポート
bcp データベース名 in 入力ファイル名(Extension="csv") -U ユーザー名 -P パスワード -f フォーマット指定ファイル名(拡張子=fmt) (-o ログファイル名(拡張子=log))
※ログファイル名の指定は必要なら行う 自分の環境では指定すると(略

または BULK INSERT を用いて以下のように行います。
BULK INSERT テーブル名 FROM '入力ファイル名(拡張子=csv)' WITH (FORMATFILE = 'フォーマット指定ファイル名(拡張子=fmt)')


機能的にはすっごく便利なんだけどなぁ・・・(´・ω・`)
フォーマット指定ファイルがもっと簡単に作れないものか・・・