Я запускаю sqlcmd из командного файла, и мне было интересно, как заставить его вернуть ERRORLEVEL, отличный от 0, когда что-то не так с резервной копией.
sql-server
sql-server-2008-r2
sqlcmd
leeand00
источник
источник
Ответы:
Вы должны использовать опцию -b в sqlcmd.
-b Указывает, что sqlcmd завершает работу и возвращает значение DOS ERRORLEVEL при возникновении ошибки. Значение, которое возвращается в переменную DOS ERRORLEVEL, равно 1, если сообщение об ошибке SQL Server имеет уровень серьезности больше 10; в противном случае возвращается 0
http://msdn.microsoft.com/en-us/library/ms162773.aspx
источник
Со страницы служебной программы MSDN SQLCMD по адресу: http://msdn.microsoft.com/en-us/library/ms162773.aspx.
Таким образом, вы можете заключить
BACKUP DATABASE...
команду вTRY...CATCH
блок и вызвать соответствующее сообщение об ошибке, котороеsqlcmd
затем вернется в ваш командный файл.Например, рассмотрим следующий
errorleveltest.sql
файл:И следующий файл .bat: (первая строка переносится для удобства чтения, но должна быть в одной строке.)
Это возвращает следующее из моей подсказки cmd.exe:
Как вы можете видеть, ERRORLEVEL 1 возвращается вместо обычного возвращаемого значения 0. Я не могу получить ERRORLEVEL, чтобы отразить фактический номер ошибки, в данном случае 50002; возможно, в моем коде есть проблема, или, возможно, есть какая-то проблема с моей средой.
источник
ERRORLEVEL
не следует ожидать, чтобы оно совпадало с номером ошибки, сообщенным с SQL Server. ErrorNumber - это специфическое для SQL Server значение, указывающее, почему оно (т. Е. SQL Server) завершено. С другой стороны,ERRORLEVEL
это специфичное для SQLCMD значение, указывающее, почему оно (то есть SQLCMD) завершено.