De manera predeterminada, SQLCMD envía todos los mensajes sin error y mensajes de error a stdout . Por lo tanto, intentar redirigir la salida no ayudará.
Lo primero que debe hacer para obtener solo uno u otro tipo de mensajes (error o no error) es decirle a SQLCMD que los separe enviando los mensajes de error (nivel de gravedad 11 o superior) a stderr . Para ello, utilice el -r
modificador de línea de comandos, especificando 0
como la opción para ese modificador (es decir -r0
). En este punto no hay una diferencia visible en términos de ejecutar SQLCMD y ver mensajes de cualquier tipo que se muestran en la pantalla.
La siguiente parte es filtrar los mensajes regulares que van a stdout . Esto se puede hacer redirigiendo los mensajes estándar a algún lugar a través de >
, pero ¿hacia dónde? Podría hacerlo > file.txt
, pero dudo que quiera un archivo de los mensajes con los que no quería comenzar. Afortunadamente, DOS tiene la NUL
palabra clave (que no es un tipo: tiene una L
, no dos) que funciona como /dev/null
en Unix. Lo que significa que puede utilizar el siguiente a la salida de redirección a ninguna parte: > NUL
.
Lo siguiente ejecutará el PRINT
comando y no mostrará ningún resultado, ya que no se generan errores y no se crea ningún archivo que contenga el resultado del PRINT
comando:
CD %TEMP%
SQLCMD -E -Q "print 1;" -r0 > NUL
Pero a continuación se muestra un mensaje de error, ya que no se redirige a ellos NUL
:
CD %TEMP%
SQLCMD -E -Q "print a;" -r0 > NUL
Devoluciones:
Msg 128, Level 15, State 1, Server DALI, Line 1
The name "a" is not permitted in this context. Valid expressions are constants,
constant expressions, and (in some contexts) variables. Column names are not permitted.
2> Err.txt
, pero pareceSQLCMD
que no divide su salida.