【SQL Server 2019】CSVをインポート・エクスポートする

ネコニウム研究所

PCを利用したモノづくりに関連する情報を掲載するブログ

【SQL Server 2019】CSVをインポート・エクスポートする

2022-7-4 | ,

SQL Server 2019でCSVをテーブルにインポート・エクスポートしたい!

概要

この記事では、SQL Server 2019でCSVをテーブルにインポート・エクスポートする手順を掲載する。

仕様書

環境

  • SQL Server 2019(15.0.2000)

手順書

インポート編とエクスポート編の2部構成です。

インポート編

下記のクエリはemployee.csvをテーブルEmployeesにインポートする例。

BULK INSERT Employees
FROM 'c:\employee.csv'
WITH
(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
);

エクスポート編

SQL Server 2019では、batファイルを使って、sqlcmdからsqlファイルを実行することでCSVファイルをエクスポートすることができる。今回はexport.batというファイル名にした。

sqlcmd -S localhost -d Employees -U sa -P password -i export.sql -b -s, -W -o employee.csv

今回使ってるオプションとパラメーターは下記のとおり。

オプション パラメーター 説明
-S サーバー名 サーバー名を指定する
-d データベース名 データベース名を指定する
-U ユーザー名 ユーザー名を指定する
-P パスワード パスワードを入力する
-i 実行するsqlファイルのパス sqlファイルのパスを入力する
-b なし エラー発生時にエラーメッセージを出力する
-s 区切り文字 区切り文字を指定する(csvファイルを出力する場合は,とする)
-W なし 文末の空白を削除する
-o 出力するファイル名 出力するファイル名を指定する

下記のクエリはテーブルEmployeesemployee.csvにインポートする例。今回はexport.sqlというファイル名にした。

SET nocount ON
SELECT * FROM Employees
SET nocount OFF

export.batを実行するとemployee.csvが出力される。export.batをダブルクリックで実行した場合は、export.batと同じディレクトリに出力される。タスクマネージャーなどで実行する場合は、-oオプションのパラメーターをフルパスで指定する。

SQLiteと比べると面倒くさいいいぃぃぃぃぃ!

おまけ

batファイルで-vオプションを使うことでsqlファイルに引数でパラメーターを渡すことができる。

sqlcmd -S localhost -d Employees -U sa -P password -i export.sql -v sort='ID' -b -s, -W -o employee.csv

-vオプションで渡したパラメーターは下記のクエリのようにパラメーター名を$()で囲んで呼び出せる。

SET nocount ON
SELECT * FROM Employees ORDER BY $(sort) ASC
SET nocount OFF

ID列の昇順でCSVファイルを出力する例。
パラメーターをWHEREで使えばフィルター的なこともできる。

まとめ(感想文)

どうしても感じちゃうのが、SQLiteと比べるとなぜにこんなメンドくさいだろうということ。簡単な処理をしたいだけの場合は特に。

複雑なことをする場合は、batファイルとsqlファイルを組み合わせることでSQL Serverの方が効率的に良いかもね!?