¿Hay alguna manera de ejecutar sqlcmd para obtener el resultado de la consulta sin mostrar la cantidad de filas afectadas?

¿Hay alguna manera de ejecutar sqlcmd para obtener el resultado de la consulta sin mostrar la cantidad de filas afectadas?

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"

findstrEstá integrado en el sistema operativo y es similar a grep. Ver cadena de búsqueda /? para más opciones.

Para eliminar una columna, utilicecut.exeherramienta. 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).

información relacionada