¿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 pareceSQLCMD
que no divide su salida.-r0
conmutador 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
-r
modificador de línea de comandos, especificando0
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 laNUL
palabra clave (que no es un tipo: tiene unaL
, 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 delPRINT
comando: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.log
El 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
-r1
envía los mensajes a stderr , incluyendoPRINT
yRAISERROR('', 10, 1)
mensajes. Es necesario utilizar-r0
para 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
-r1
envía los mensajes a stderr , incluyendoPRINT
yRAISERROR('', 10, 1)
mensajes. Debe usar-r0
para mantener esos mensajes de información regulares que se enviarán de manera tal que se redirijan a install.log .