
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"
findstr
está integrado ao sistema operacional e é semelhante ao grep. Veja findstr /? para mais opções.
Para remover uma coluna, usecut.exe
ferramenta. 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).