当一个或多个.sql
脚本文件的文件夹中的.sql
脚本中发生任何错误时,我必须中断sqlcmd batch命令。
for %%G in (*.sql) do sqlcmd -b /S "ServerInstance" /d "DBName" -U "Username" -P "Password" -i "%%G"
IF %ERRORLEVEL% ==1 EXIT /b
此命令一个接一个地执行文件夹中的所有文件
我的文件夹中有两个.sql
脚本文件;执行中的第一个脚本返回错误,这就是我要中断执行的位置,但不会中断并继续执行文件夹中的第二个脚本。
答案 0 :(得分:1)
由于循环后有if %ErrorLevel%==1
查询,因此当然不会退出。
将其移入循环将解决您的问题,尽管我不会检查ErrorLevel
中的1
,但宁愿检查它是否不是0
:
for %%G in (*.sql) do (
sqlcmd -b /S "ServerInstance" /d "DBName" -U "Username" -P "Password" -i "%%~G"
if not ErrorLevel 1 exit /B
)
如果遇到ErrorLevel
的值1
或更大,这将退出循环,因此,预计您的命令不会产生负值。 (此语法的一个很好的副作用是它不需要delayed variable expansion,而对于if !ErrorLevel! neq 0
这样的条件是必需的。)
一种更好,更简单的方法是使用conditional execution operator ||
,它检查前一条命令的退出代码(在大多数情况下与ErrorLevel
相同),并仅在非零值的情况:
for %%G in (*.sql) do (
sqlcmd -b /S "ServerInstance" /d "DBName" -U "Username" -P "Password" -i "%%~G" || exit /B
)