¿Cómo puede hacer que SQLCMD, al ejecutar un archivo de script SQL, solo muestre los errores o advertencias que encuentra?
Básicamente, no quiero que se envíen mensajes basados en información.
sql-server
sql-server-2008-r2
sqlcmd
bytedev
fuente
fuente

2> Err.txt, pero pareceSQLCMDque no divide su salida.-r0conmutador de línea de comandos, en cuyo caso pueden redirigirse a un archivo usando2>, o pueden mostrarse mientras se redirigen mensajes regulares>. Por favor vea mi respuesta para más detalles.Respuestas:
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, especificando0como 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 laNULpalabra clave (que no es un tipo: tiene unaL, 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 delPRINTcomando:Pero a continuación se muestra un mensaje de error, ya que no se redirige a ellos
NUL:Devoluciones:
fuente
Lo siguiente funcionará:
sqlcmd -U user -P pass -S Server -Q "sp_who" -r0 1> test.logEl resultado de la consulta se colocará en el registro y no se imprimirá nada en la pantalla.
Más detalles en el artículo de MSDN sobre sqlcmd .
fuente
-r1envía los mensajes a stderr , incluyendoPRINTyRAISERROR('', 10, 1)mensajes. Es necesario utilizar-r0para mantener los mensajes de información regulares que van a la salida estándar de tal manera que se les redirige a test.log .Encontré esto en SQLServerCentral
http://www.sqlservercentral.com/Forums/Topic536968-146-1.aspx
fuente
-r1envía los mensajes a stderr , incluyendoPRINTyRAISERROR('', 10, 1)mensajes. Debe usar-r0para mantener esos mensajes de información regulares que se enviarán de manera tal que se redirijan a install.log .