0

次のBATファイルは正常に機能しています。特定のSQLサーバーに接続し、getdate()を選択します。

私が本当に望んでいたのは、サーバーが接続可能かどうかをテストすることです。

私は次のようなものが欲しいです:

set is_connectable  = call sqlcmd.exe %%SERVITORE%%

これを達成する方法はありますか?

マルセロに感謝します

@echo off
color fc
cls
echo.
@ECHO --- BEGIN THE SCRIPT 1 ----
echo.
@echo the SERVITORE is "%1"
echo.
echo.

if "%1"=="" GOTO USAGE


set SERVITORE=-Stcp:%1% -Q " USE MASTER select getdate() "

call sqlcmd.exe %%SERVITORE%%


color 6
GOTO THE_END

:USAGE
echo.
echo USAGE:
echo. 
ECHO the first parameter is the SERVITORE server.
echo example 1 SERVITORE108
echo.
ECHO the second parameter is optional 
echo but if not supplied the default is \\SERVITORE\folder2$
echo.

echo ATB
echo.

:THE_END
color 8
4

1 に答える 1

1

クエリを実行し、結果をDOS環境変数に設定するのは簡単です。たとえば、次の手順を実行して、SQL Serverインスタンスから日付/時刻を取得できます(SQL Serverは私のインスタンスでローカルに実行されています)。

for /f "skip=2 delims=" %%i in ('sqlcmd -S localhost -E -Q "set nocount on; select getdate() as [Now]"') do set is_connectable=%%i

ただし、is_connectableこの例で設定されている環境変数は任意の値であるため、評価が困難になります。SQL Serverが存在し、稼働していて応答性があることを確認しようとしているだけなので、次のように、より予測可能な出力を作成するクエリを実行する必要があります。

@echo off

:: Make sure the variable is undefined to start with
set is_connectable=

:: Make the connection and run a query that should always return '1'
for /f "skip=2 delims= " %%i in ('sqlcmd -S localhost -E -Q "set nocount on; select 1 as [Rows] into #temp; select @@rowcount as [Rows]; drop table #temp"') do set is_connectable=%%i

:: Verify if SQL Server is avaialble
if not defined is_connectable goto NotFound
if "%is_connectable%"=="1" goto Found
goto UnknownError

:Found
echo SQL Server was found and returned '1' as expected...
goto TheEnd

:NotFound
echo SQL Server was not found...
goto TheEnd

:UnknownError
echo SQLServer was found, but the return value was '%is_connectable%' instead of '1'...
goto TheEnd

:TheEnd
于 2013-02-12T16:20:56.237 に答える