Возвращаемое значение SQLCMD

Мне нужно проверить статус выхода (успех/сбой) запроса, запускаемого через утилиту SQLCMD. Например, сервер, с которым я соединяюсь, не имеет имени базы данных EastWind. Затем команда ниже выдает сообщение с сообщением...

> "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" 
     -S ZEPHIR -E -Q "USE WestWind"
Changed database context to 'WestWind'.
> echo %errorlevel%
0
> "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" 
     -S ZEPHIR -E -Q "USE EastWind"
Database 'EastWind' does not exist. Make sure that the name is entered correctly
> echo %errorlevel%
0

Я вижу, что возвращаемое значение в обоих случаях одинаково. Как проверить, не сработала ли команда в SQLCMD?

Ответ 1

Вам нужно использовать опцию -V.

Пример:

  > SQLCMD.EXE -S whatever -E -V16 -Q "USE does_not_exist"
  Msg 911, Level 16, State 1, ...
  Could not locate entry ...
  > echo %ERRORLEVEL%
  16

Обновление: альтернативно вы можете использовать опцию -b. Которая имеет различную семантику для выполнения (вся партия останавливается при первой ошибке). YMMV.

Пример:

  > SQLCMD.EXE -S whatever -E -b -Q "USE does_not_exist"
  Msg 911, Level 16, State 1, ...
  Could not locate entry ...
  > echo %ERRORLEVEL%
  1

Вы также можете объединить -b и -V.

Ответ 2

Я не уверен, но вы пробовали переключатель SQLCMD -m? sqlcmd Утилита