BCPコマンドでImport・Exportをする

1. はじめに

  • SQLServerの特定のテーブルからCSVファイル形式でデータを取得したい
  • SQLServerのインポート・エクスポート機能でも対応可能だがコマンド実行で一括で取得したい

2. コマンド

  • エクスポート・インポート、それぞれのバッチファイルを作成
  • csvファイル形式とする
  • バッチファイルの実行結果はログファイルに出力する。
    • 処理開始・完了メッセージ
    • SQL実行結果(登録件数)の出力

(1) エクスポート

SET logFile=c:\temp\import.log
echo エクスポート開始 > %logfile%

bcp dbo.testTB1 OUT c:\temp\testTB1.csv -c -t, -S localhost\**インスタンス名** -U sa -P **パスワード** -d testDB >> %logFile%
bcp dbo.testTB2 OUT c:\temp\testTB2.csv -c -t, -S localhost\**インスタンス名** -U sa -P **パスワード** -d testDB >> %logFile%

pause "エクスポート完了。ログ出力先:" %logfile% "" >> %logfile%
exit

(2) インポート

SET logFile=c:\temp\export.log
echo インポート開始 > %logfile%

sqlcmd -Q "TRUNCATE TABLE dbo.testTB1;" -S localhost\**インスタンス名** -U sa -P **パスワード** -d sampleDB >> %logFile%
sqlcmd -Q "TRUNCATE TABLE dbo.testTB2;" -S localhost\**インスタンス名** -U sa -P **パスワード** -d sampleDB >> %logFile%

bcp dbo.testTB1 IN c:\temp\testTB1.csv -c -t, -S localhost\**インスタンス名** -U sa -P **パスワード** -d sampleDB >> %logFile%
bcp dbo.testTB2 IN c:\temp\testTB2.csv -c -t, -S localhost\**インスタンス名** -U sa -P **パスワード** -d sampleDB >> %logFile%

pause "インポート完了。ログ出力先:" %logfile% "" >> %logfile%
exit

3. メモ

  • テーブルによってはインポート時に不要な初期値「0」?が入ったことある。
    テーブル項目の構成が初期値「0」セットされたから。アプリ側が0値の処理に対応していなかったためと思われる。
    インポート後もチェックは必要。