Martin Smaithからの回答は私の好みの解決策ですが、他に2つの方法を提案できます。
1)SSMSで「SQLCMDモード」を使用できます。
次のようになります。
:connect MyServer -U MyLogin -P MyComplexPassword
--Then have some code
:connect MyOtherServer ...
--Then have some code
ただし、それをループすることはできないため、コードが繰り返されます。
または
2)サーバーのリストに基づいてFORループを使用してCMDファイルを作成できます。これが私自身の醸造の例です。コピーしてREQ.CMDに貼り付け、1行にサーバー名を含むSERVERS.LSTという名前のテキストファイルを作成します。接続はWindows認証されます。必要に応じてSQLCMDのOSQLを変更できますが、OSQLはSQL2008で動作するはずです。
REM To execute a SQL command or file to multiple servers
REM Using a server list file
REM And using 2 kind of parameters (script file or query)
REM Pollus Brodeur - June 2007
@echo off
set PARAM1=%1
set PARAM2=%2
set PARAM3=1
REM You need at least 1 parameter
if x==%1x goto ERROR1
if EXIST %PARAM1% (set ISFILE=1) else (set ISFILE=0)
REM Setting Servers List File and verify file existance or X
if x==%2x (set PARAM2=servers.lst)
if X==%2 (set PARAM3=0 & set PARAM2=servers.lst & goto MAIN)
if NOT EXIST %PARAM2% (goto ERROR2)
REM Not interactive
if X==%3 (set PARAM3=0)
:MAIN
echo ===============================================================================
echo REQ - Execute a SQL command or file to multiple servers using a list file
echo %DATE% %TIME%
if %PARAM3%==0 (echo Non Interactive mode)
echo ===============================================================================
if %ISFILE%==0 (GOTO COMMAND)
echo For following file :
echo %PARAM1%
goto EXEC
:COMMAND
echo For following command :
echo %PARAM1%
:EXEC
echo ===============================================================================
echo For following servers :
type %PARAM2%
echo ===============================================================================
if %PARAM3%==1 (echo Interactive mode. Use X parameter to deactivate & pause)
echo Exec...
if NOT EXIST .\out mkdir out
if EXIST out\req.out (del out\req.out)
if %ISFILE%==0 (GOTO COMMAND1)
for /F %%a in (%PARAM2%) do echo %%a & osql -S %%a -E -n -h-1 -w 9999 -u -i %PARAM1% -o out\req.out.%%a.txt
goto ENDEXEC
:COMMAND1
for /F %%a in (%PARAM2%) do echo %%a & osql -S %%a -E -n -h-1 -w 9999 -u -Q %PARAM1% -o out\req.out.%%a.txt
:ENDEXEC
type out\req.out.*.txt >> out\req.out 2>&1
echo ===============================================================================
echo Execution is done. Output files are in .\out
echo more /E /C out\req.out.*.txt
echo more out\req.out
echo ===============================================================================
if %PARAM3%==1 (pause)
goto END
:ERROR1
goto CALLEXAMPLE
:ERROR2
echo Error: Server File List named %PARAM2% doesn't exists
goto CALLEXAMPLE
:CALLEXAMPLE
echo -------------------= REQ call examples =--------------------
echo REQ.cmd Param1 Param2 Param3
echo Param1 = command or scriptfile.sql {mandatory}
echo Param2 = servers list file {servers.lst per default}
echo Param3 = X {for non interactive mode}
echo ------------------------------------------------------------
:END