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 -rmodificador de línea de comandos, especificando 0como 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 NULpalabra clave (que no es un tipo: tiene una L, no dos) que funciona como /dev/nullen Unix. Lo que significa que puede utilizar el siguiente a la salida de redirección a ninguna parte: > NUL.
Lo siguiente ejecutará el PRINTcomando y no mostrará ningún resultado, ya que no se generan errores y no se crea ningún archivo que contenga el resultado del PRINTcomando:
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 pareceSQLCMDque no divide su salida.