![](http://sqlserver.work/wp-content/themes/cocoon-master/images/b-woman.png)
バッチファイルから
・sqlcmd(SELECT文)を実行して
・結果をCSVファイルへ出力
する方法を紹介します!
![](http://sqlserver.work/wp-content/themes/cocoon-master/images/b-woman.png)
CSVファイルには
・列名(カラム名)も出力
させます!
![出力するCSVファイル。 列名(カラム名)も出力。](https://sqlserver.work/wp-content/uploads/2021/08/sqlcmd_csv_output_001.png)
前提
単純にsqlcmd(SELECT文)を実行して結果をファイルへ出力すると、以下のように2行目に「- -」が出力されてしまいます。
![2行目に「-------」が出力されてしまう。](https://sqlserver.work/wp-content/uploads/2021/08/sqlcmd_csv_output_002.png)
2行目の「- -」は不要のため取り除きます。
取り除くためにひと手間を加えます。
サンプルプログラムの概要
バッチファイルから
・sqlcmd(SELECT文)を実行して、結果をtempファイルへ出力
・tempファイルの先頭が「-」でない行を、CSVファイルへ出力
・後片付けとしてtempファイルを削除
します。
実行するSELECT文は以下とします。
SELECT * FROM employee
![実行するSELECT文](https://sqlserver.work/wp-content/uploads/2021/08/sqlcmd_csv_output_003.png)
サンプルプログラム作成
@echo off
REM #####################
REM ★接続情報
REM #####################
REM サーバー名(サーバーのPC名\インスタンス名)
set dbServer=localhost\SQLEXPRESS
REM データベース名
set dbName=sampleDB
REM tempファイルのパス
set tempFilePath=C:\Users\user\Desktop\temp.csv
REM CSVファイルのパス
set csvFilePath=C:\Users\user\Desktop\result.csv
REM 実行するSQL文(SELECT文)
set sql=SET NOCOUNT ON; SELECT * FROM employee
REM SELECT文を実行しtempファイルへ出力 ※区切り文字をカンマ、余分なスペースを削除
sqlcmd -S %dbServer% -d %dbName% -E -s "," -W -o %tempFilePath% -Q "%sql%"
REM tempファイルの先頭が「-」でない行をCSVファイルへ出力 ※2行目の「---」を取り除く
findstr /V "^-" %tempFilePath% > %csvFilePath%
REM tempファイルを削除
del %tempFilePath%
pause
exit
実行結果
sqlcmdのSELECT結果をCSVファイルへ出力できました。
※列名(カラム名)も出力できました。
※2行目の「- -」 を取り除くこともできました。
![実行結果](https://sqlserver.work/wp-content/uploads/2021/08/sqlcmd_csv_output_004.png)
参考①
PowerShellからinvoke-sqlCmdを使用して、SELECT結果をCSVファイルへ出力することもできます。
詳細は以下の記事をご確認ください。
参考②
VBAからSELECT結果をCSVファイルへ出力することもできます。
詳細は以下の記事をご確認ください。
参考③
VBAにより、出力したCSVファイルをExcelへ読み込めます。
詳細は以下の記事をご確認ください。