SQLserverにクエリを一括で流すbatch

1 min読了の目安(約1200字TECH技術記事

バッチと同じ階層のフォルダの中にあるクエリを全て実行するバッチです。

配置

C:.
│  runquery.bat
│
├─folder1
│      query1.sql
│      query2.sql
│
└─folder2
        query3.sql
        query4.sql

バッチ

runquery.bat
@echo off
cd /d %~dp0

SET USERID=(ユーザー名)
SET PASSWD=(パスワード)
SET HOSTNAME=(サーバー名またはIP)
SET DATABASE=(データベース名)

setlocal enabledelayedexpansion

echo *---------------------------------*
echo DBユーザー            :%USERID%
echo DBユーザーパスワード  :%PASSWD%
echo サーバー名            :%HOSTNAME%
echo データベース名        :%DATABASE%
echo *---------------------------------*

echo.
set /P USR_INPUT_STR="処理を行います。よろしいですか?(Y/N)"

if /i %USR_INPUT_STR% neq y goto cancel

for /d %%i in (*) do (
    pushd .
    cd %%i
    echo %%i
    for %%j in (*.sql) do (
        echo %%j
        echo %%i_%%j >> ../Logfile_%HOSTNAME%_%DATABASE%.txt
        sqlcmd -S %HOSTNAME% -d %DATABASE% -U %USERID% -P %PASSWD% -i "%%j" >> ../Logfile_%HOSTNAME%_%DATABASE%.txt
    )
    popd
)

pause

:cancel

echo.
echo.
echo 処理を中断しました。
goto :end

pause

注意

Shift JISで保存してください。実行したときに文字化けしてしまいます。
VS Codeで見るときは右下のUTF8をクリックすると上部にSelect Actionが出てきます。
そこでReopen with Encoding>Japanese(Shift JIS)をクリックします。

ログは全然工夫していないので、SQLServerManagementStudioで実行したときの結果がそのまま表示されます。あくまで実行結果を見てわかる前提なので、SQLがよくわからない人が自動でクエリを実行する用途では作っていません。