🐕

【バッチ】SQLの結果を使用する

2023/06/19に公開

はじめに

SQLServerのDBの値を使用した処理をしたく、windowsのbatファイルにて前述の処理を実装したところ、多少方法が面倒になったので、忘れないようにメモ。

内容

色々試行錯誤したが、どうやらselect文を実行した結果を直接変数に入れるのは面倒らしいので、以下のような方法を取った。

sqlの結果を取得する
rem sqlコマンドを実行し、結果をカンマ区切りで別ファイルに出力
sqlcmd -S %INSTNAME% -d %DBNAME% -i %INPUTFILE_NAME% -v Param1=%PARAM1% Param2=%PARAM2% -s, -W -h -1 -o %OUTPUTFILE_NAME%

rem 結果ファイルの内容を取得し変数に格納
for /f "tokens=1,2 delims=," %%i in (%OUTPUTFILE_NAME%) do (
    set res1=%%i
    set res2=%%j
)

詳細

まず、sqlcmdコマンドで別途準備しているsqlファイルの内容を実行し、カンマ区切りで別ファイルに出力する。(今回の場合は取得する項目数が2以上の場合を想定している)
sql文が短い場合は直接batファイルに記載する形でも良いだろう。

後ろのオプションについて、-sで区切り文字をカンマに指定、-Wで余計な余白を削除、-h -1でヘッダを非表示にし、最後に-oで出力先ファイル名を指定している。

その後、forコマンドにて結果のファイルの内容をカンマ区切りで取得し、変数に格納する。

今回はカンマ区切りで1列目と2列目を取得したいので、tokens=1,2で1列目と2列目を使用することとし、delimsにて区切り文字をカンマに指定している。

取得した値は%%iから順番に%%j,%%k,...とアルファベット順に自動で続いていく。

まとめ

本来は結果を直接変数に入れるのがベストであり、おそらくそれなりにやり方はあると思うので、機会があれば試してみたいと思う。

Discussion