【SQL Server 2019】CSVをインポート・エクスポートする
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 | 出力するファイル名 | 出力するファイル名を指定する |
下記のクエリはテーブルEmployees
をemployee.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の方が効率的に良いかもね!?