🐕
【バッチ】SQLの結果を使用する
はじめに
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