У меня есть пакет, который я использую для запуска нескольких сценариев SQL и записи их вывода в один текстовый файл (SQL_results.txt). Это блок, который запускает скрипт и проверяет результаты на наличие ошибок в начале вывода (ошибки всегда будут в одной строке, начиная с «Msg»):
SQLCMD command_to_run_a_script > error.txt
set /p result=<error.txt
set result=%result:~0,3%
if ""%result%""==""Msg"" exit
type error.txt >> SQL_results.txt
del error.txt
Стоит отметить, что вывод имеет динамическое количество строк и может превышать предел переменной char, и что строка «Msg ...» не всегда может быть первой.
Я пробовал это для проверки выполнения проверки переменной, но он будет записывать только последнюю строку вывода для каждой строки:
for /f "delims=" %%i in ('SQLCMD command_to_run_a_script') do (set VAR=%%i & ECHO %VAR%>> SQL_results.txt)
Можно ли сделать что-то подобное, построчно анализируя результаты, пытаясь найти в переменной тот, который начинается с «Msg», вместо того, чтобы создавать и удалять текстовый файл для каждого сценария?
sqlcmd
выйдет из нуля в случае успеха и ненулевое значение в случае ошибки. Чтобы убедиться, проверьте документацию. Но если это правда, вы можете простоsqlcmd command_to_run_a_script || echo There was an error.
или что-то подобное. Если код выхода ненадежен, вы также можетеsqlcmd command_to_run_a_script | findstr /i "^Msg" >NUL && echo Output contained an error. Something went wrong.
- person rojo   schedule 03.08.2017