Existe uma maneira de executar o sqlcmd para obter a saída da consulta sem mostrar o número de linhas afetadas?

Existe uma maneira de executar o sqlcmd para obter a saída da consulta sem mostrar o número de linhas afetadas?

Estou executando uma consulta simples no SQL Server 2005 e quero exportá-la para um arquivo via sqlcmd. Eu esperava obter os resultados em formato csv sem os cabeçalhos e os metadados da consulta (quantas linhas são afetadas). para os cabeçalhos, você pode especificar -h -1 mas como se livrar do texto final?

Agora eu tenho

sqlcmd -S klingon -d stardb -i C:\testscript.sql -o C:\testresults.csv -h -1 -s ","

com o roteiro sendo algo simples ao som de

select x, y, z from agent

Infelizmente, os resultados são assim:

         24 aingles1         creablegs            
         25 tbails12         bull2dog12           
         26 jtaylor3         Leandon62606         
         27 forrestw1        nuke19211            

(4 rows affected)

Não consigo encontrar nada no arquivo de ajuda que me diga como remover a última parte que informa quantas linhas foram afetadas.

Alguém tem ideias?

Responder1

Acho que você pode querer a opção "SET NOCOUNT ON". Seu script SQL será semelhante a:

 set nocount on  
 select x, y, z from agent  
 set nocount off  

E o conjunto de resultados será:

 24 aingles1         creablegs            
 25 tbails12         bull2dog12           
 26 jtaylor3         Leandon62606         
 27 forrestw1        nuke19211    

Menos a linha de contagem de linhas no final.

Responder2

Eu adiciono o seguinte bloco de código ao início da consulta para remover todas as mensagens ao usar sqlcmd.exe para exportar resultados para CSV.

-- Suppress warnings and messages like (2 rows effected)
SET ANSI_WARNINGS OFF;
SET NOCOUNT ON;
-- SQLCMD.exe batch command
:setvar SQLCMDERRORLEVEL 1
-- To Reenable
--:setvar SQLCMDERRORLEVEL 0
/**********************************************************************************
**  DISABLING WARNINGS AND MESSAGES
**  Disable "Changed database context to 'DatabaseName'." message in the CSV file when using 
**  SQLCMD.exe. You'll get a syntax error when executing this query in Management 
**  Studio if SQLCMD Mode is not enabled [Query] --> [SQLCMD Mode].
**  :setvar SQLCMDERRORLEVEL 1 is used to disable messages like (152 Rows affected).
**********************************************************************************/

Responder3

sqlcmd -S svr -d db ... | findstr /v "rows affected"

findstrestá integrado ao sistema operacional e é semelhante ao grep. Veja findstr /? para mais opções.

Para remover uma coluna, usecut.exeferramenta. Então você poderia executar:

sqlcmd -S svr -d db ... | cut -c10-

Isso só geraria o caractere 10 em diante, removendo assim os números das linhas. Ajuste o número 10 de acordo. Você também pode tentar campos:

sqlcmd -S svr -d db ... | cut -f2-

Isso geraria apenas os campos 2 e posteriores (à direita).

informação relacionada