Я использую SQLCMD, чтобы получить количество строк в таблице, но я также хочу быть в курсе, не приведет ли запрос к ошибке.
Используемый мной sqlcmd выглядит так:
sqlcmd -S %server% -U %user% -P %pass% -b -Q "select count(*) from %table%"
Если это сработает, он вернет:
-----------
10205
(1 rows affected)
(Обратите внимание, что над ------- есть пустая строка для имени столбца, которое я не указываю.)
Если я передаю несуществующую таблицу, я получаю следующий ответ:
Msg 208, Level 16, State 1, Server devServer, Line 1
Invalid object name 'dbo.no_table'.
Поскольку у меня есть флаг -b, я могу проверить значение ERRORLEVEL (в данном случае 1).
Чтобы сохранить переменную count, я использовал следующую строку:
for /F %%i in ('sqlcmd -S %server% -U %user% -P %pass% -b -Q "select count(*) from %table%" ^| findstr /r "[^(][0-9]"') do SET /a rec_count=%%i
После for %errorlevel% возвращает 0. Даже внутри do errorlevel равен 0.
Есть ли простой способ запустить sqlcmd, сохранить счетчик, если нет ошибки, и распечатать обе строки, если есть ошибка?
errorlevel
не изменяется, даже если таблица недействительна? - person unclemeat   schedule 10.04.2015