2010-09-30 19 views
7

SQLCMD admite el parámetro -s para especificar el separador de columna, pero no pude entender cómo representar el carácter de tabulación (CHAR (9)). He intentado el siguiente pero ambos no funcionan:Cómo usar TAB como separador de columna en SQLCMD

sqlcmd -S ServerName -E -Q"select * from mytable" -s"\t" -o results.txt 
sqlcmd -S ServerName -E -Q"select * from mytable" -s'\t' -o results.txt 

Alguna idea de cómo hacer esto en SQLCMD?

Respuesta

7

Es difícil obtener resultados sin formato de SQLCMD.

Si desea crear un archivo de salida delimitado por tabuladores, BCP podría ser una mejor apuesta:

bcp "select * from mytable" queryout results.txt -S server -T -c 
14

En un archivo por lotes, poniendo una ficha entre las comillas dobles funciona.

sqlcmd -S ServerName -E -Q"select * from mytable" -s" " -o results.txt 

a hacer lo mismo en un archivo de uso PowerShell escaparon comillas dobles envueltos alrededor de una pestaña escapado

sqlcmd -S ServerName -E -Q"select * from mytable" -s `"`t`" -o results.txt 
+0

Gran ¡¡¡¡responder!!!! Para otros que buscan hacer esto en PowerShell, tenga en cuenta que el espacio después de '-s' es importante. :) –

2

que he intentado en numerosas ocasiones para pasar el carácter real TAB para SQLCMD, y simplemente no puede hacer que lo tome. Mi fecha de trabajo favorita hasta la fecha es pasar SQLCMD el "Separador de unidades" ASCII, que es hexadecimal 0x1F, y puede ingresarse en la línea de comando al presionar Ctrl-_ (subrayado de control, que en un teclado de EE. UU. Se convierte en Ctrl-shift -'- '(el' - 'al lado del' 0 'en la fila superior del teclado).

La ventaja de utilizar el' Separador de unidades 'es que es MUY improbable que esté presente en el texto de cualquier descripción, y fue diseñado específicamente para este propósito (ver https://en.wikipedia.org/wiki/Delimiter)

después de haber conseguido SQLCMD a hacer eso por mí, a continuación, canalizar su salida a través de un estilo Unix traducir comandos como:

tr '\037' '\t' 

El \ 037 es octal para el 'Separador de unidades', y \ t representa el carácter de tabulación, 'tr' traducirá AMBOS de estos para nosotros, no necesitamos confiar en ningún truco de cotización en nuestros scripts o shells.

Para obtener 'tr' en Windows, puede instalar el paquete CoreUtils desde GnuWin32 (consulte http://gnuwin32.sourceforge.net/packages/coreutils.htm) o subir de peso e instalar un entorno Unix completo como Cygwin (http://cygwin.com/).

Poniendo los dos juntos obtenemos:

sqlcmd ... -h-1 -W -k -r1 -s^_ ... | tr '\037' '\t' 

y esto le dará a su salida con pestañas.

Busque las otras opciones que he utilizado anteriormente, son esenciales para tratar de obtener una salida limpia de SQLCMD (en orden, sin encabezados, recorte de espacio en blanco, CRLF en espacios, errores en STDERR (no en su salida) archivo!) y '^ _' es como aparecerá el Separador de unidades en la línea de comando). También necesitarás agregar "SET NOCOUNT ON"; a su consulta o secuencia de comandos sql, de lo contrario obtendrá el recuento de filas como un mensaje de prueba que aparece en su salida.

2

encontrado una buena respuesta aquí: SQLCMD outfile as tab delimited text file

  1. Abrir el Bloc de notas
  2. Pega esto: sqlcmd -S (local) -E -s"<TAB>" -Q "select * from sys.dm_exec_query_stats" -o MyOutput.txt -h-1 -W
  3. Resalte <TAB>, después haga clic en la ficha clave
  4. Guardar th archivo electrónico como miLote.bat
  5. Run miLote.bat
2

Una respuesta similar a uno publicado anteriormente, pero es más simple de una manera que creo que es significativo.

  1. Abra su editor de texto
  2. Prensa Tab
  3. Resalte el trozo de espacio en blanco (en la ficha) creado
  4. Copia y pega esto en el lugar en el comando SQL

Aunque esta pestaña se representa como un gran trozo de espacio en blanco, es un solo carácter.

La otra respuesta tenía algunas cosas innecesarias sobre pegar todo el comando con "<TAB>" en él. Creo que eso desanima a la gente (sin duda me desanimó).

0

Para lograr esto utilizando sqlcmd es necesario utilizar el carácter de tabulación de este modo: \ t una consulta de ejemplo la exportación de una sola tabla de base de datos SQL en un archivo de texto mediante una pestaña delimitador es el siguiente:

sqlcmd -S ServerName -d databaseTableName -Q "SELECT * FROM TABLE_NAME" -o C:\backups\tab_delimiter_bakup.txt -s"\t" 
Cuestiones relacionadas