SQL Server関連のサービスの開始・終了を行うバッチ

# はじめに

自宅のPCに SQL Server 2017 Express をインストールすると SQL Server 関連サービスが自動で開始されてしまう。
SQL Server を必要としない場合はメモリを節約したいので、サービスが自動で起動しないように設定し、必要なときにだけサービスを開始させたい。サービスを開始させたいときに１つ１つのサービスを手動で開始させると手間がかかるのでバッチプログラムを作成した。また、サービスを停止させるバッチプログラムも作成した。

# ソースコード

## SQL Server関連サービスを開始するバッチプログラム

※次のバッチを実行するためには管理者権限が必要です。

```vb:start_sql_server.bat

@echo off
setlocal
call :Main %*
endlocal & exit /b %errorlevel%

rem ----------------------------------------------------------------------------
rem  Initialize
rem ----------------------------------------------------------------------------
:Initialize

    rem SQL Serverのインスタンス名
    set SQL_SERVER_INSTANCE_NAME=SQLEXPRESS

    rem SQL Server関連のサービス
    set SERVICE_LIST=
    set SERVICE_LIST=%SERVICE_LIST%  MSSQL$%SQL_SERVER_INSTANCE_NAME%
rem set SERVICE_LIST=%SERVICE_LIST%  MSSQLFDLauncher$%SQL_SERVER_INSTANCE_NAME%
rem set SERVICE_LIST=%SERVICE_LIST%  SQLAgent$%SQL_SERVER_INSTANCE_NAME%
rem set SERVICE_LIST=%SERVICE_LIST%  SQLTELEMETRY$%SQL_SERVER_INSTANCE_NAME%
rem set SERVICE_LIST=%SERVICE_LIST%  SQLBrowser
rem set SERVICE_LIST=%SERVICE_LIST%  SQLWriter

    exit /b

rem ----------------------------------------------------------------------------
rem  Main
rem ----------------------------------------------------------------------------
:Main

    call :Initialize

    for %%i in (%SERVICE_LIST%) do call :Start_Service %%i

    echo.
    pause
    exit /b 0

rem ----------------------------------------------------------------------------
rem  Start_Service
rem ----------------------------------------------------------------------------
:Start_Service

    sc query "%~1" | findstr STATE | findstr RUNNING > nul

    if "%errorlevel%"=="0" (
        echo サービス %~1 は既に開始しています。
        exit /b 1
    )

    net start "%~1"

    if not "%errorlevel%"=="0" (
        echo サービス %~1 の開始に失敗しました。
        exit /b 2
    )

    exit /b 0

```






## SQL Server関連サービスを停止するバッチプログラム

※次のバッチを実行するためには管理者権限が必要です。

```vb:stop_sql_server.bat

@echo off
setlocal
call :Main %*
endlocal & exit /b %errorlevel%

rem ----------------------------------------------------------------------------
rem  Initialize
rem ----------------------------------------------------------------------------
:Initialize

    set SQL_SERVER_INSTANCE_NAME=SQLEXPRESS

    set SERVICE_LIST=
    set SERVICE_LIST=%SERVICE_LIST%  MSSQL$%SQL_SERVER_INSTANCE_NAME%
    set SERVICE_LIST=%SERVICE_LIST%  MSSQLFDLauncher$%SQL_SERVER_INSTANCE_NAME%
    set SERVICE_LIST=%SERVICE_LIST%  SQLAgent$%SQL_SERVER_INSTANCE_NAME%
    set SERVICE_LIST=%SERVICE_LIST%  SQLTELEMETRY$%SQL_SERVER_INSTANCE_NAME%
    set SERVICE_LIST=%SERVICE_LIST%  SQLBrowser
    set SERVICE_LIST=%SERVICE_LIST%  SQLWriter

    exit /b

rem ----------------------------------------------------------------------------
rem  Main
rem ----------------------------------------------------------------------------
:Main

    call :Initialize

    for %%i in (%SERVICE_LIST%) do call :Stop_Service %%i

    echo.
    pause
    exit /b 0

rem ----------------------------------------------------------------------------
rem  Stop_Service
rem ----------------------------------------------------------------------------
:Stop_Service

    sc query "%~1" | findstr STATE | findstr STOPPED > nul

    if "%errorlevel%"=="0" (
        echo サービス %~1 は既に停止しています。
        exit /b 1
    )

    net stop "%~1"

    if not "%errorlevel%"=="0" (
        echo サービス %~1 の停止に失敗しました。
        exit /b 2
    )

    exit /b 0

```