Como você pode obter o SQLCMD, ao executar um arquivo de script SQL, para gerar apenas erros ou avisos encontrados?
Eu essencialmente não quero que as mensagens baseadas em informações sejam exibidas.
sql-server
sql-server-2008-r2
sqlcmd
bytedev
fonte
fonte
2> Err.txt
, mas parece queSQLCMD
ela não divide sua saída.-r0
opção de linha de comando; nesse caso, eles podem ser redirecionados para um arquivo usando2>
ou podem ser exibidos enquanto mensagens regulares são redirecionadas por>
. Por favor, veja minha resposta para detalhes.Respostas:
Por padrão, o SQLCMD envia todas as mensagens de erro e não para stdout . Portanto, tentar redirecionar a saída não ajudará.
A primeira coisa que você precisa fazer para obter apenas um ou outro tipo de mensagem (erro ou não) é dizer ao SQLCMD para separá-las enviando as mensagens de erro (nível de gravidade 11 ou superior) ao stderr . Você faz isso usando a
-r
opção de linha de comando, especificando0
como a opção para essa opção (ou seja-r0
). Nesse ponto, não há diferença visível em termos de execução do SQLCMD e de visualização de mensagens de qualquer tipo exibidas na tela.A próxima parte é filtrar as mensagens regulares que vão para o stdout . Isso pode ser feito redirecionando as mensagens stdout para algum lugar via
>
, mas para onde? Você poderia> file.txt
, mas duvido que queira um arquivo com as mensagens com as quais não queria começar. Felizmente, o DOS tem aNUL
palavra - chave (que não é um tipo: tem umL
, não dois) que funciona como/dev/null
no Unix. Ou seja, você pode usar o seguinte para a saída de redirecionamento para lugar nenhum:> NUL
.A seguir, o
PRINT
comando será executado e não será exibido, pois nenhum erro é gerado e nenhum arquivo é criado que contenha a saída doPRINT
comando:Mas o seguinte exibe uma mensagem de erro, pois essas não estão sendo redirecionadas para
NUL
:Devoluções:
fonte
O seguinte funcionará:
sqlcmd -U user -P pass -S Server -Q "sp_who" -r0 1> test.log
A saída da consulta será colocada no log e nada será impresso na tela.
Mais detalhes no artigo do MSDN sobre sqlcmd .
fonte
-r1
envia todas as mensagens para o stderr , incluindoPRINT
eRAISERROR('', 10, 1)
messages. Você precisa usar-r0
para manter essas mensagens informativas regulares em stdout, de modo que elas sejam redirecionadas para test.log .Encontrei isso no SQLServerCentral
http://www.sqlservercentral.com/Forums/Topic536968-146-1.aspx
fonte
-r1
envia todas as mensagens para o stderr , incluindoPRINT
eRAISERROR('', 10, 1)
messages. Você precisa usar-r0
para manter essas mensagens informativas regulares em stdout, de modo que elas sejam redirecionadas para install.log .