📋
特定のDBに存在するすべてのテーブルの登録データを、テーブルごとにCSV出力する
ある特定のデータベースに存在するすべてテーブルから、テーブルごとに登録データをCSV出力するバッチを作ってみました。
バッチ
TableDataExpoter.bat
@echo off
set SERVER="サーバー名"
set DATABASE="データベース名"
set USER="ログインユーザー名"
set PASSWORD="パスワード"
rem テーブルリストを取得
sqlcmd -S %SERVER% -d %DATABASE% -U %USER% -P %PASSWORD% -Q "SET NOCOUNT ON; SELECT '[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'" -h-1 -s"," -W -m 1 -f 65001 > "tables.txt"
rem テーブルごとにデータをエクスポート
for /F %%i in (tables.txt) do (
sqlcmd -S %SERVER% -d %DATABASE% -U %USER% -P %PASSWORD% -Q "SET NOCOUNT ON; SELECT * FROM %%i" -s"," -W -h-1 -m 1 -f 65001 > "%%i.csv"
)
rem 不要なファイルの削除
del tables.txt
実行方法
- 任意のフォルダーに、上記のコマンドが書かれたbatファイルを配置する
- コマンドプロンプトを起動する
- 以下のコマンドを実行し、文字コードをUTF-8に変更する
chcp 65001
- 1で配置したbatファイルを実行する
実行結果
batファイルの同階層に、テーブルごとにCSVファイルが作られます。
また、ファイルの中身は👇のような感じになります。
[dbo].[サンプル]
[dbo].[SampleTable]
補足
-
Shift_JISで出力したい場合
- コマンドから「-f 65001」を削除する
- 実行方法の3以外を実施する
-
CSVファイル以外で出力したい場合
- "%%i.csv" の箇所を、任意のファイル形式に書きかえてください(.txtなど)
-
各テーブルのカラムをヘッダーとして出力したい場合
- テーブルごとにデータをエクスポートするコマンドから「-h-1」を削除する
Discussion