Estoy ejecutando sqlcmd desde un archivo por lotes y me preguntaba cómo hacer que devuelva un ERRORLEVEL que no sea 0 cuando algo sale mal con la copia de seguridad.
sql-server
sql-server-2008-r2
sqlcmd
leeand00
fuente
fuente
Respuestas:
Debe usar la opción -b en sqlcmd.
-b Especifica que sqlcmd sale y devuelve un valor de ERRORLEVEL de DOS cuando se produce un error. El valor que se devuelve a la variable ERRORLEVEL de DOS es 1 cuando el mensaje de error de SQL Server tiene un nivel de gravedad mayor que 10; de lo contrario, el valor devuelto es 0
http://msdn.microsoft.com/en-us/library/ms162773.aspx
fuente
Desde la página de MSDN SQLCMD Utility en: http://msdn.microsoft.com/en-us/library/ms162773.aspx
Entonces, podría envolver el
BACKUP DATABASE...
comando en unTRY...CATCH
bloque y generar el mensaje de error apropiado, quesqlcmd
luego volvería a su archivo por lotes.Por ejemplo, considere el siguiente
errorleveltest.sql
archivo:Y el siguiente archivo .bat: (la primera línea está ajustada para facilitar la lectura, pero debe estar en una sola línea).
Esto devuelve lo siguiente desde mi indicador cmd.exe:
Como puede ver, ERRORLEVEL 1 se devuelve en lugar del valor de retorno normal de 0. No puedo hacer que ERRORLEVEL refleje el número de error real, en este caso 50002; quizás haya un problema en mi código, o quizás haya algún problema con mi entorno.
fuente
ERRORLEVEL
no se debe esperar que sea el mismo valor que el Número de error informado desde SQL Server. ErrorNumber es un valor específico de SQL Server para indicar por qué terminó (es decir, SQL Server). Por otro lado,ERRORLEVEL
es un valor específico de SQLCMD para indicar por qué terminó (es decir, SQLCMD).