
Estoy ejecutando una consulta simple en SQL Server 2005 y quiero exportarla a un archivo mediante sqlcmd. Esperaba obtener los resultados en formato csv sin los encabezados ni los metadatos de la consulta (cuántas filas se ven afectadas). para los encabezados puedes especificar -h -1 pero ¿cómo puedes deshacerte del texto final?
Ahora mismo tengo
sqlcmd -S klingon -d stardb -i C:\testscript.sql -o C:\testresults.csv -h -1 -s ","
con el guión siendo algo simple por la melodía de
select x, y, z from agent
Desafortunadamente, los resultados son así:
24 aingles1 creablegs
25 tbails12 bull2dog12
26 jtaylor3 Leandon62606
27 forrestw1 nuke19211
(4 rows affected)
Parece que no puedo encontrar nada en el archivo de ayuda que me diga cómo eliminar la última parte que me dice cuántas filas están afectadas.
¿Alguien tiene ideas?
Respuesta1
Creo que es posible que desees la opción "ESTABLECER NO CUENTA EN". Su secuencia de comandos SQL se verá así:
set nocount on
select x, y, z from agent
set nocount off
Y el conjunto de resultados será:
24 aingles1 creablegs
25 tbails12 bull2dog12
26 jtaylor3 Leandon62606
27 forrestw1 nuke19211
Menos el recuento de filas de la línea al final.
Respuesta2
Agrego el siguiente bloque de código al comienzo de la consulta para eliminar todos los mensajes cuando uso sqlcmd.exe para exportar resultados a 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).
**********************************************************************************/
Respuesta3
sqlcmd -S svr -d db ... | findstr /v "rows affected"
findstr
Está integrado en el sistema operativo y es similar a grep. Ver cadena de búsqueda /? para más opciones.
Para eliminar una columna, utilicecut.exe
herramienta. Entonces podrías ejecutar:
sqlcmd -S svr -d db ... | cut -c10-
Esto solo generaría desde el carácter 10 en adelante, eliminando así los números de línea. Ajuste el número 10 en consecuencia. También puedes probar los campos:
sqlcmd -S svr -d db ... | cut -f2-
Esto solo generaría los campos 2 y siguientes (a la derecha).