【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の方が効率的に良いかもね!?