因此,我正在编写第一个使用 OSQL 查询的批处理脚本。这是我当前的代码:
setlocal enableDelayedExpansion
FOR /F %%G in (names.txt) DO (
:RESTARTER
osql -b -D PCRServer -r -h-1 -s "," -i %%G.sql -o C:\SQLQurey\out\%%G.txt -U SOMEUSER -P SOMEPASS
if !ERRORLEVEL! NEQ 0 goto RESTARTER
)
endlocal
这个想法是 names.txt 有一个要运行的 sql 查询列表,然后将输出吐出到同名的文件中,然后可以将其连接到主输出中。
我遇到的问题是错误检查,特别是死锁。遇到死锁时, 我希望重新运行失败的查询,然后继续执行列表。
我的想法是,通过错误级别检查和 goto,它会做我想要的。相反,当它跳回到 :RESTARTER 时,%%G 的值会丢失,并且我得到一个永久错误循环。
我已经尝试在重启器之外将另一个变量设置为 %%G 的值......虽然这有效,但一旦成功执行查询,它就会退出原始 FOR 循环并停止。
所以,我的问题是,我如何告诉脚本重试最后一个失败的命令并继续 FOR 循环,直到到达 names.txt 的结尾?
编辑:好的,所以我能够通过将实际的 osql 命令放在单独的批处理文件中,然后从循环中调用该批处理并将 %%G 作为参数传递来使其工作。但是,我仍然想知道是否有办法在没有单独脚本的情况下做到这一点。