在批量失败的情况下重试 sql 查询
Retry a sql query in case of failure in batch
此脚本处理给定文件夹中的所有 sql 文件并将结果输出到 csv。您有什么想法吗?如果出现错误或失败,我该如何调整它以重试 sql 文件?
@ECHO OFF
SET SQLCMD="C:\Program Files\Microsoft SQL Server0\Tools\Binn\SQLCMD.EXE"
SET PATH="C:\Users\username\Desktop\Scripts\Reports\sql"
SET SERVER="localhost"
SET DB="database"
SET LOGIN="username"
SET PASSWORD="password"
SET OUTPUT="C:\Users\username\Desktop\Scripts\Reports\output_%date%-%time:~0,2%-%time:~3,2%-%time:~6,2%.csv"
CD %PATH%
ECHO %date% %time% > %OUTPUT%
for %%f in (*.sql) do (
%SQLCMD% -S %SERVER% -d %DB% -E -i %%~f >> %OUTPUT% -W -w 1024 -s";")
谢谢!
您无法测试 ERRORLEVEL 环境变量。通常零 ERRORLEVEL 值表示成功。您还需要启用延迟扩展以在块内检查它。
这样的事情可能会有所帮助,
SetLocal EnableDelayedExpansion
for %%f in (*.sql) do (
Set /a success=1
for /L %%w in (1,1,5) do ( rem retry five times
if !success! NEQ 0 (
%SQLCMD% -S %SERVER% -d %DB% -E -i %%~f >> %OUTPUT% -W -w 1024 -s";"
if !ERRORLEVEL! EQU 0 set /a success=0
)
)
if !success! NEQ 0 (
rem sql failed, log or advise
)
)
EndLocal
另一个重点,注意PATH环境变量。您最好使用另一个名称 SQL_PATH 或 MY_PATH.
或者您可以使用 PUSHD 和 POPD 来更改您的工作目录
@echo off
SET ...
rem save current dir and jump to...
pushd "C:\Users\username\Desktop\Scripts\Reports\sql"
for %%f in (*.sql) do (
...
...
)
rem restore dir saved by pushd
popd
此脚本处理给定文件夹中的所有 sql 文件并将结果输出到 csv。您有什么想法吗?如果出现错误或失败,我该如何调整它以重试 sql 文件?
@ECHO OFF
SET SQLCMD="C:\Program Files\Microsoft SQL Server0\Tools\Binn\SQLCMD.EXE"
SET PATH="C:\Users\username\Desktop\Scripts\Reports\sql"
SET SERVER="localhost"
SET DB="database"
SET LOGIN="username"
SET PASSWORD="password"
SET OUTPUT="C:\Users\username\Desktop\Scripts\Reports\output_%date%-%time:~0,2%-%time:~3,2%-%time:~6,2%.csv"
CD %PATH%
ECHO %date% %time% > %OUTPUT%
for %%f in (*.sql) do (
%SQLCMD% -S %SERVER% -d %DB% -E -i %%~f >> %OUTPUT% -W -w 1024 -s";")
谢谢!
您无法测试 ERRORLEVEL 环境变量。通常零 ERRORLEVEL 值表示成功。您还需要启用延迟扩展以在块内检查它。
这样的事情可能会有所帮助,
SetLocal EnableDelayedExpansion
for %%f in (*.sql) do (
Set /a success=1
for /L %%w in (1,1,5) do ( rem retry five times
if !success! NEQ 0 (
%SQLCMD% -S %SERVER% -d %DB% -E -i %%~f >> %OUTPUT% -W -w 1024 -s";"
if !ERRORLEVEL! EQU 0 set /a success=0
)
)
if !success! NEQ 0 (
rem sql failed, log or advise
)
)
EndLocal
另一个重点,注意PATH环境变量。您最好使用另一个名称 SQL_PATH 或 MY_PATH.
或者您可以使用 PUSHD 和 POPD 来更改您的工作目录
@echo off
SET ...
rem save current dir and jump to...
pushd "C:\Users\username\Desktop\Scripts\Reports\sql"
for %%f in (*.sql) do (
...
...
)
rem restore dir saved by pushd
popd