Estou executando o sqlcmd a partir de um arquivo em lotes e queria saber como fazê-lo retornar um ERRORLEVEL diferente de 0 quando algo der errado com o backup.
sql-server
sql-server-2008-r2
sqlcmd
leeand00
fonte
fonte
Respostas:
Você deve usar a opção -b no sqlcmd.
-b Especifica que o sqlcmd sai e retorna um valor DOS ERRORLEVEL quando ocorre um erro. O valor retornado para a variável DOS ERRORLEVEL é 1 quando a mensagem de erro do SQL Server tem um nível de gravidade maior que 10; caso contrário, o valor retornado é 0
http://msdn.microsoft.com/en-us/library/ms162773.aspx
fonte
Na página Utilitário MSDN SQLCMD em: http://msdn.microsoft.com/en-us/library/ms162773.aspx
Portanto, você pode agrupar o
BACKUP DATABASE...
comando em umTRY...CATCH
bloco e gerar a mensagem de erro apropriada, quesqlcmd
retornaria ao seu arquivo em lotes.Por exemplo, considere o seguinte
errorleveltest.sql
arquivo:E o seguinte arquivo .bat: (a primeira linha está ajustada para facilitar a leitura, mas precisa estar em uma única linha.)
Isso retorna o seguinte do meu prompt do cmd.exe:
Como você pode ver, ERRORLEVEL 1 é retornado em vez do valor normal de retorno 0. Não consigo fazer com que ERRORLEVEL reflita o número de erro real, neste caso 50002; talvez haja um problema no meu código ou talvez haja algum problema no meu ambiente.
fonte
ERRORLEVEL
não se deve esperar o mesmo valor que o número do erro relatado no SQL Server. O ErrorNumber é um valor específico do SQL Server para indicar por que ele (ou seja, SQL Server) foi encerrado. Por outro lado,ERRORLEVEL
é um valor específico do SQLCMD para indicar por que ele (ou seja, SQLCMD) terminou.