簡單實用的批次檔,自動偵測 SQL Server 服務(預設執行個體 MSSQLSERVER)目前狀態:**運行中則停止並設為手動啟動**;**已停止則啟動並設為手動**。適合快速重啟、維護視窗切換。
ToggleSQLService.bat)@echo off
for /f "skip=3 tokens=4" %%i in ('sc query MSSQLSERVER') do set "zt=%%i" & goto :next
:next
if /i "%zt%"=="RUNNING" (
echo 已發現服務正在運行,開始停止...
net stop MSSQLSERVER
echo sc config MSSQLSERVER start= demand 設定為手動啟動
) else (
echo 服務目前處於停止狀態,開始啟動...
echo sc config MSSQLSERVER start= demand 設定為手動啟動
net start MSSQLSERVER
)
pause
sc query MSSQLSERVER:查詢服務狀態,第 4 行第 4 欄為 RUNNING/STOPPED。skip=3 tokens=4:跳過前 3 行標題,取第 4 欄狀態值。net stop/start:標準服務控制命令,需**系統管理員權限**執行。sc config ... start= demand:設為**手動啟動**(demand),避免意外自動啟動;原腳本寫 DISABLED 會導致無法 net start,此處已修正。MSSQL$InstanceName,請自行替換腳本中的 MSSQLSERVER。@echo off
set INST=%1
if "%INST%"=="" set INST=MSSQLSERVER
for /f "skip=3 tokens=4" %%i in ('sc query %INST%') do set "ST=%%i" & goto :CHK
:CHK
if /i "%ST%"=="RUNNING" (
net stop %INST%
sc config %INST% start= demand
exit /b 0
) else if /i "%ST%"=="STOPPED" (
sc config %INST% start= demand
net start %INST%
exit /b 1
) else (
echo 未知狀態: %ST%
exit /b -1
)
用法:ToggleSQLService.bat MSSQL$PROD,返回碼 0=已停止、1=已啟動、-1=異常。
cluster res/FailoverClusters PowerShell) 而非本地 net stop。