はじめに
自宅のPCに SQL Server 2017 Express をインストールすると SQL Server 関連サービスが自動で開始されてしまう。
SQL Server を必要としない場合はメモリを節約したいので、サービスが自動で起動しないように設定し、必要なときにだけサービスを開始させたい。サービスを開始させたいときに1つ1つのサービスを手動で開始させると手間がかかるのでバッチプログラムを作成した。また、サービスを停止させるバッチプログラムも作成した。
ソースコード
SQL Server関連サービスを開始するバッチプログラム
※次のバッチを実行するためには管理者権限が必要です。
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関連サービスを停止するバッチプログラム
※次のバッチを実行するためには管理者権限が必要です。
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