📋

特定のDBに存在するすべてのテーブルの登録データを、テーブルごとにCSV出力する

2024/03/07に公開

ある特定のデータベースに存在するすべてテーブルから、テーブルごとに登録データを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

実行方法

  1. 任意のフォルダーに、上記のコマンドが書かれたbatファイルを配置する
  2. コマンドプロンプトを起動する
  3. 以下のコマンドを実行し、文字コードをUTF-8に変更する
    chcp 65001
    
  4. 1で配置したbatファイルを実行する

実行結果

batファイルの同階層に、テーブルごとにCSVファイルが作られます。

また、ファイルの中身は👇のような感じになります。


[dbo].[サンプル]



[dbo].[SampleTable]

補足

  • Shift_JISで出力したい場合

    1. コマンドから「-f 65001」を削除する
    2. 実行方法の3以外を実施する
  • CSVファイル以外で出力したい場合

    • "%%i.csv" の箇所を、任意のファイル形式に書きかえてください(.txtなど)
  • 各テーブルのカラムをヘッダーとして出力したい場合

    • テーブルごとにデータをエクスポートするコマンドから「-h-1」を削除する

Discussion