如何编写调用 sqlcmd 的批处理文件来查询 SQL 服务器,如果实例无法访问,它会将服务器名称回显到日志文件中?
How to write a batch file calling sqlcmd to query SQL Server and if instance unreachable, it would echo the server name to a log file?
想法是编写一个批处理文件来对 SQL 个服务器列表执行查询并从中获取一些信息,如果无法访问任何 SQL 个服务器,我想要这个批处理文件将 servername\instancename
写入文本文件供我参考。
我有大约 100 个 SQL 服务器实例(在文本文件中),当我得到结果时,很难知道在批处理文件执行期间哪个实例无法访问。
这是我用来从(在文本文件中列出的)SQL 服务器获取信息的脚本,它有效:
for /F "tokens=*" %%S in (SQLLIST.txt) do sqlcmd -E -h -1 -W -M -S %%S -i C:\Foldername\Query.sql >> Destination\QueryResult.csv -s ","
我想我可能需要添加一个 IF 语句来做到这一点?请帮忙。
注意我在这个设备上没有Sqlcmd
,所以无法测试这个。
我会说使用 -b
开关来获取 errorlevel
这应该只是 echo
来筛选实例并且 errorlevel
0
是成功并且 1
是错误的:
@echo off
setlocal enabledelayedexpansion
for /F "tokens=*" %%S in (SQLLIST.txt) do (
sqlcmd -b -E -h -1 -W -M -S %%S -i C:\Foldername\Query.sql >> Destination\QueryResult.csv -s ","
echo %%S !errorlevel!
)
因此您可以将其记录到文件中:
@echo off
setlocal enabledelayedexpansion
(for /F "tokens=*" %%S in (SQLLIST.txt) do (
sqlcmd -b -E -h -1 -W -M -S %%S -i C:\Foldername\Query.sql >> Destination\QueryResult.csv -s ","
echo %%S !errorlevel!
)
)2>&1>mysqlcmd.log
或单独记录
@echo off
setlocal enabledelayedexpansion
(for /F "tokens=*" %%S in (SQLLIST.txt) do (
sqlcmd -b -E -h -1 -W -M -S %%S -i C:\Foldername\Query.sql >> Destination\QueryResult.csv -s ","
echo %%S !errorlevel!
)
)2>&1>mysqlcmd.log
或者您可以指定成功或失败:
@echo off
setlocal enabledelayedexpansion
(for /F "tokens=*" %%S in (SQLLIST.txt) do (
sqlcmd -b -E -h -1 -W -M -S %%S -i C:\Foldername\Query.sql >> Destination\QueryResult.csv -s ","
if !errorlevel! equ 0 set outp=Success
if !errorlevel! equ 1 set outp=Failed
echo %%S !outp!
)
)2>&1>mysqlcmd.log
想法是编写一个批处理文件来对 SQL 个服务器列表执行查询并从中获取一些信息,如果无法访问任何 SQL 个服务器,我想要这个批处理文件将 servername\instancename
写入文本文件供我参考。
我有大约 100 个 SQL 服务器实例(在文本文件中),当我得到结果时,很难知道在批处理文件执行期间哪个实例无法访问。
这是我用来从(在文本文件中列出的)SQL 服务器获取信息的脚本,它有效:
for /F "tokens=*" %%S in (SQLLIST.txt) do sqlcmd -E -h -1 -W -M -S %%S -i C:\Foldername\Query.sql >> Destination\QueryResult.csv -s ","
我想我可能需要添加一个 IF 语句来做到这一点?请帮忙。
注意我在这个设备上没有Sqlcmd
,所以无法测试这个。
我会说使用 -b
开关来获取 errorlevel
这应该只是 echo
来筛选实例并且 errorlevel
0
是成功并且 1
是错误的:
@echo off
setlocal enabledelayedexpansion
for /F "tokens=*" %%S in (SQLLIST.txt) do (
sqlcmd -b -E -h -1 -W -M -S %%S -i C:\Foldername\Query.sql >> Destination\QueryResult.csv -s ","
echo %%S !errorlevel!
)
因此您可以将其记录到文件中:
@echo off
setlocal enabledelayedexpansion
(for /F "tokens=*" %%S in (SQLLIST.txt) do (
sqlcmd -b -E -h -1 -W -M -S %%S -i C:\Foldername\Query.sql >> Destination\QueryResult.csv -s ","
echo %%S !errorlevel!
)
)2>&1>mysqlcmd.log
或单独记录
@echo off
setlocal enabledelayedexpansion
(for /F "tokens=*" %%S in (SQLLIST.txt) do (
sqlcmd -b -E -h -1 -W -M -S %%S -i C:\Foldername\Query.sql >> Destination\QueryResult.csv -s ","
echo %%S !errorlevel!
)
)2>&1>mysqlcmd.log
或者您可以指定成功或失败:
@echo off
setlocal enabledelayedexpansion
(for /F "tokens=*" %%S in (SQLLIST.txt) do (
sqlcmd -b -E -h -1 -W -M -S %%S -i C:\Foldername\Query.sql >> Destination\QueryResult.csv -s ","
if !errorlevel! equ 0 set outp=Success
if !errorlevel! equ 1 set outp=Failed
echo %%S !outp!
)
)2>&1>mysqlcmd.log