Utilidad SQLCMD del file BAT – cómo devolver ERRORLEVEL en caso de error de syntax

¿Cómo puedo get% ERRORLEVEL% de la utilidad SQLCMD cuando algunos de los files .sql contienen errores de syntax? Estos files crean procedimientos almacenados. No invocan "raiseerror", pero pueden conatin error de syntax y necesito terminar el process. Pero siempre devuelve% ERRORLEVEL% como 0. Intenté usar -b, -V y -m (y sus combinaciones), pero nada funcionó para mí como se esperaba.

Aquí está el fragment de código de mi file BAT.

REM process all sql files in "SQL\scripts" folder and subfolders FOR /R "SQL\scripts" %%G IN (*.sql) DO ( sqlcmd -d %1 -S %2 -U %3 -P %4 -i "%%G" -b -V 1 echo %ERRORLEVEL% IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% ) 

¡Necesitas el enabledelayedexpansion -b pero junto con la enabledelayedexpansion , de esa forma puedes usar !errorlevel! dentro del circuito y get los resultados esperados.

Ponga setlocal enabledelayedexpansion cualquier lugar antes de ejecutar sqlcmd , probablemente sea mejor al principio del lote o justo antes del ciclo. También tenga en count el uso de signos de exclamación ( ! ) En lugar de los signos de porcentaje ( % ), que denotan el uso de la expansión retardada.

[También probé con if not errorlevel 0 … (no ! Ni ningún % : ver help if ) pero no pude get los resultados deseados]

Gracias, aquí está el script de trabajo por lotes.

 @ECHO OFF setlocal enabledelayedexpansion FOR /R "C:\SQL" %%G IN (*.sql) DO ( sqlcmd -S%1 -d tangoDB -E -h-1 -w255 -i "%%G" -b echo %%G - !ERRORLEVEL! IF !ERRORLEVEL! NEQ 0 EXIT /B !ERRORLEVEL! )