Estou executando o sqlcmd de um arquivo em lotes e queria saber como fazê-lo retornar um ERRORLEVEL diferente de 0 quando algo der errado com o backup.
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
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
Na página do MSDN SQLCMD Utility em: http://msdn.microsoft.com/en-us/library/ms162773.aspx
Assim, você poderia envolver o
BACKUP DATABASE...
comando em umTRY...CATCH
bloco e gerar a mensagem de erro apropriada, quesqlcmd
retornaria ao seu arquivo de lote.Por exemplo, considere o seguinte
errorleveltest.sql
arquivo:E o seguinte arquivo .bat: (a primeira linha é quebrada para facilitar a leitura, mas precisa estar em uma única linha.)
Isso retorna o seguinte do meu prompt cmd.exe:
Como você pode ver, ERRORLEVEL 1 é retornado em vez do valor de retorno normal de 0. Não consigo fazer com que o ERRORLEVEL reflita o número real do erro, neste caso 50002; talvez haja um problema no meu código, ou talvez haja algum problema com meu ambiente.
Eu resolvi isso com este comando