bcp こういうものです。
bulk copy program ユーティリティ (bcp) は、Microsoft SQL Server のインスタンスと、ユーザー指定の形式のデータ ファイルとの間でデータの一括コピーを行います。 bcp ユーティリティを使うと、多数の新規行を SQL Server テーブルにインポートしたり、データをテーブルからデータ ファイルにエクスポートしたりできます。
このコンポーネントには、Windows インストーラー 4.5 と Microsoft ODBC Driver for SQL Server 17 の両方が必要です。
データのバックアップ、本番環境からテスト環境へのデータコピー、資料として、その他いろいろで使っています。
作業によってはもっといいやり方もあるのですが、テーブル単位に処理する時はお手軽かなと思ってます。
■基本的なコマンドパターン
引数には対象テーブルと接続情報。
outの指定なら指定ファイルへエクスポート、inなら指定ファイルからのインポートです。
-cで文字形式を指定します。-Cで文字コードを指定。
bcp DB名.スキーマ名.テーブル名 out ファイル名 -c -S サーバー名 -U ユーザー名 -P パスワード
bcp DB名.スキーマ名.テーブル名 in ファイル名 -c -S サーバー名 -U ユーザー名 -P パスワード
特に難しい事はなく、あとはテーブル名の分コマンドをどんどん書いていくだけです。
■普段使い
テーブル名以外は共通になるパターンが多いと思いますので、
sys.tablesからテーブルの一覧を取得しつつリテラルを足してbcpコマンドを生成する、
という事をよくやります。
あるいは、テーブル管理一覧をExcelとかに落として、関数で文字を足すなど。
ExpとImpのコマンドを隣列に生成しておけば、抜け漏れ予防に役立つかも知れません。
先日あるプロジェクトからの依頼でデータ抽出した際には、
テーブルリストを読んでループでbcpを回すバッチを作りました。
(なかなかPowerShellに手が出ません・・・)
■入出力形式について
個人的には-n指定でデータのネイティブ (データベース) データ型を使用するのが、
容量/処理速度ともにベターなのかなと考えています。
というのもOracleでSQLloader使った昔の経験では圧倒的な速度差があったからなのですが。
SQLserverではエクスポートは試せたものの、本番相当な感じのデータではインポートが試せておらず。
パフォーマンスの程が余り体感出来ておりません。
横目で伺ってるプロジェクトでも、システム移行時にデータ変換が必要との事で文字で読める形式を求められていて。
新環境にDB作っていったん丸ごと放り込めば・・・と思うのですが、ディスク容量には限りがありますしね。
という訳で、