バッチファイルとは、Windows環境で実行できるコマンド列を記述したテキストファイルで、バッチファイルを使うと、データベースに接続してSQL文を実行するだけでなく、そのSQL文の実行結果をファイルに出力することもできる。
今回は、バッチファイルからSQL Serverに接続し、SELECT文を実行した結果をファイルに出力してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事の実装が完了していること。
サンプルプログラムの作成
setting.iniの内容は以下の通りで、前提条件のプログラムと同じ内容で、データベースの接続先などを定義している。
;共通設定ファイル
;DBサーバー名
serverName=localhost
;ユーザー名
userName=USER01
;パスワード
userPass=USER01
;DB名
dbName=master
;スキーマ名
schemaName=dbo
;様々な文字を含むパラメータ
param=!"#$%&'()=-~^|\`@{[;]}+<>*/:_?\output_maxid_minid.batの内容は以下の通りで、変数execSqlに定義した2つのSQLを実行し、結果をoutput.log(変数outputFileで定義)に出力している。
@echo off
rem 設定ファイル(setting.ini)の設定値を読み込む
for /f "tokens=1,* delims==" %%i in (setting.ini) do (
set %%i=%%j
)
rem 結果を出力するファイル名
set outputFile=output.log
rem user_dataテーブルのid最大値を取得するSQL
set execSql=SELECT ISNULL(MAX(id), 0) FROM %schemaName%.user_data
rem sqlcmd -S (ホスト名) -U (ユーザー名) -P (パスワード) -d (データベース名) -Q (実行するSQL文)
rem 以下のコマンドは1行で記載する必要がある
set retVal=sqlcmd -S %serverName% -U %userName% -P %userPass% -d %dbName%
-Q "SET NOCOUNT ON; %execSql%"
rem select文の実行結果を変数「nowMaxId」に格納
for /f %%i in ('%retVal%') do (
set nowMaxId=%%i
)
rem 実行結果をコンソールとファイル(outputFileに指定した値)に出力する関数を呼び出す
call:output_result user_dataテーブルのid最大値 maxId %nowMaxId%
rem user_dataテーブルのid最小値を取得するSQL
set execSql=SELECT ISNULL(Min(id), 0) FROM %schemaName%.user_data
rem sqlcmd -S (ホスト名) -U (ユーザー名) -P (パスワード) -d (データベース名) -Q (実行するSQL文)
rem 以下のコマンドは1行で記載する必要がある
set retVal=sqlcmd -S %serverName% -U %userName% -P %userPass% -d %dbName%
-Q "SET NOCOUNT ON; %execSql%"
rem select文の実行結果を変数「nowMinId」に格納
for /f %%i in ('%retVal%') do (
set nowMinId=%%i
)
rem 実行結果をコンソールとファイル(outputFileに指定した値)に出力する関数を呼び出す
call:output_result user_dataテーブルのid最小値 minId %nowMinId%
rem 処理を終了する
exit /b
rem 実行結果をコンソールとファイル(outputFileに指定した値)に出力する関数
:output_result
echo *** %1 ***
echo 実行SQL: %execSql%
echo %2: %3
echo.
echo *** %1 *** >> %outputFile%
echo 実行SQL: %execSql% >> %outputFile%
echo %2: %3 >> %outputFile%
echo. >> %outputFile%
exit /b
サンプルプログラムの実行結果
サンプルプログラムの実行結果は、以下の通り。
1) バッチファイルを実行前のデータは、以下の通り。
SELECT * FROM dbo.user_data ORDER BY id ASC

2) コマンドプロンプトを起動し、バッチファイルが存在するディレクトリ(C:\tmp)に移動し、各ファイルの存在を確認する。

3) バッチファイル(output_maxid_minid.bat)を実行する。実行すると、コマンドプロンプトには以下の値が表示される。

4) バッチ実行後にバッチファイルが存在するディレクトリ(C:\tmp)を確認すると、以下のように、output.log(変数outputFileで定義)が出力されていることが確認できる。

5) output.log(変数outputFileで定義)の中身は以下の通りで、コンソール上と同じ内容が出力されていることが確認できる。

6) user_dataテーブルの内容を、以下のように変更する。
SELECT * FROM dbo.user_data ORDER BY id ASC

7) バッチファイル(output_maxid_minid.bat)を再度実行する。実行すると、コマンドプロンプトには以下の値が表示される。

8) output.log(変数outputFileで定義)の中身は以下の通りで、コンソール上と同じ内容が追加で出力されていることが確認できる。

要点まとめ
- バッチファイルとは、Windows環境で実行できるコマンド列を記述したテキストファイルで、バッチファイルを使うと、データベースに接続してSQL文を実行するだけでなく、そのSQL文の実行結果をファイルに出力することもできる。
- バッチファイル内で、関数(特定の処理を1つにまとめたもの)を呼び出すこともできる。





