【SQL Server】sqlcmdのSELECT結果をCSVファイルへ出力する【バッチファイル】

バッチファイルから
 ・sqlcmd(SELECT文)を実行して
 ・結果をCSVファイルへ出力
する方法を紹介します!

CSVファイルには
 ・列名(カラム名)も出力
させます!

出力するCSVファイル。 列名(カラム名)も出力。
出力するCSVファイル。 列名(カラム名)も出力。
PR

前提

単純にsqlcmd(SELECT文)を実行して結果をファイルへ出力すると、以下のように2行目に「- -」が出力されてしまいます。

2行目に「-------」が出力されてしまう。
2行目に「- -」が出力されてしまう。

2行目の「- -」は不要のため取り除きます。
取り除くためにひと手間を加えます。

PR

サンプルプログラムの概要

バッチファイルから
 ・sqlcmd(SELECT文)を実行して、結果をtempファイルへ出力
 ・tempファイルの先頭が「-」でない行を、CSVファイルへ出力
 ・後片付けとしてtempファイルを削除
します。

実行するSELECT文は以下とします。

SELECT * FROM employee
実行するSELECT文
実行するSELECT文
PR

サンプルプログラム作成

@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

SELECT文の前に「SET NOCOUNT ON」を実行することで
 ・不要な情報(XX行処理されました)を非表示
にしています(18行目)。

sqlcmdのオプション「-s」を使用して「”,”」を指定することで、各カラムの区切り文字を「カンマ」にしています(21行目)。

sqlcmdのオプション「-W」を使用することで、不要なスペースを削除しています(21行目)。

sqlcmdのオプション「-o」を使用することで、SELECT文の結果をtempファイルへ出力しています(21行目)。

findstrコマンドにより、tempファイルの先頭が「-」でない行をCSVファイルへ出力しています(24行目)。
※2行目の「- -」 を取り除くために実施しています。

delコマンドにより、tempファイルを削除しています(27行目)。
※後片付けです。

PR

実行結果

sqlcmdのSELECT結果をCSVファイルへ出力できました。
※列名(カラム名)も出力できました。
※2行目の「- -」 を取り除くこともできました。

実行結果
実行結果
PR

参考①

PowerShellからinvoke-sqlCmdを使用して、SELECT結果をCSVファイルへ出力することもできます。

詳細は以下の記事をご確認ください。

PR

参考②

VBAからSELECT結果をCSVファイルへ出力することもできます。

詳細は以下の記事をご確認ください。

PR

参考③

VBAにより、出力したCSVファイルをExcelへ読み込めます。

詳細は以下の記事をご確認ください。

タイトルとURLをコピーしました