2010-09-30 5 views
7

SQLCMD prend en charge le paramètre -s pour spécifier le séparateur de colonnes, mais je n'ai pas pu comprendre comment représenter le caractère de tabulation (CHAR (9)). J'ai essayé le suivant mais les deux ne fonctionnent pas:Comment utiliser TAB comme séparateur de colonne dans 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 

Des idées comment faire ceci dans SQLCMD?

Répondre

7

Il est difficile d'obtenir des résultats non formatés à partir de SQLCMD.

Si vous voulez créer un fichier de sortie délimité par des tabulations, BCP pourrait être un meilleur pari:

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

Dans un fichier batch, mettre un onglet entre les guillemets doubles fonctionne.

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

à faire de même dans une utilisation de fichiers PowerShell se sont échappés des guillemets doubles enveloppées autour d'un onglet échappé

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

Grande répondre!!!! Pour ceux qui cherchent à le faire dans PowerShell - notez que l'espace après '-s' est important. :) –

2

Je l'ai essayé à plusieurs reprises de passer le caractère de tabulation réelle pour SQLCMD, et je simplement Je n'arrive pas à le prendre. Mon travail préféré à ce jour est de passer SQLCMD le "Unit Separator" ASCII, qui est hexadécimal 0x1F, et peut être entré sur la ligne de commande en tapant Ctrl-_ (soulignement de contrôle, qui sur un clavier américain devient ctrl-shift -'- '(le' - 'à côté du' 0 'sur la rangée supérieure du clavier)

L'avantage d'utiliser le' Séparateur d'unité 'est qu'il est TRÈS improbable d'être présent dans le texte de tout description et a été spécialement conçu à cet effet (voir https://en.wikipedia.org/wiki/Delimiter)

Après avoir obtenu SQLCMD faire ça pour moi, je puis redirigez sa sortie si une commande traduit style Unix:

tr '\037' '\t' 

Le \ 037 est octal pour 'Unit Separator', et \ t représente le caractère de tabulation, 'tr' traduira TOUS les deux pour nous, nous n'avons pas besoin de compter sur des astuces dans nos scripts ou shells. Pour obtenir 'tr' sur Windows, vous pouvez installer le paquet CoreUtils à partir de GnuWin32 (voir http://gnuwin32.sourceforge.net/packages/coreutils.htm) ou aller lourd et installer un environnement Unix complet tel que Cygwin (http://cygwin.com/).

Mettre les deux ensemble, nous obtenons:

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

et cela vous donnera votre sortie avec des onglets. Recherchez les autres options que j'ai utilisées ci-dessus, elles sont essentielles pour obtenir une sortie propre de SQLCMD (dans l'ordre: pas d'en-tête, espace blanc, CRLF dans les espaces, erreurs dans STDERR (pas dans votre sortie) fichier!) et le '^ _' est comment le séparateur d'unité apparaîtra sur la ligne de commande). Vous devrez également ajouter "SET NOCOUNT ON". à votre requête ou votre script SQL, sinon vous obtiendrez le nombre de lignes comme un message d'essai apparaissant dans votre sortie!

2

trouvé une bonne réponse ici: SQLCMD outfile as tab delimited text file

  1. Ouvrez le Bloc-notes
  2. coller ceci: sqlcmd -S (local) -E -s"<TAB>" -Q "select * from sys.dm_exec_query_stats" -o MyOutput.txt -h-1 -W
  3. Sélectionnez <TAB>, puis appuyez sur la Tab touche
  4. Enregistrer e fichier comme MyBatch.bat
  5. Run MyBatch.bat
2

Une réponse similaire à celui affiché ci-dessus, mais il est plus simple d'une manière que je pense est important.

  1. Ouvrez votre éditeur de texte
  2. Appuyez sur Tab
  3. Mettez en surbrillance le morceau d'espaces (l'onglet) créé
  4. Copier et coller dans l'endroit de votre commande SQL

Même si cet onglet est représenté par un large espace blanc, il s'agit d'un seul caractère.

L'autre réponse avait quelques trucs inutiles sur le collage de la commande entière avec "<TAB>" dedans. Je pense que cela jette les gens (ça m'a certainement découragé).

0

Pour y parvenir en utilisant sqlcmd vous devez utiliser le caractère de tabulation comme ceci: \ t Une requête par exemple l'exportation d'une seule table de base de données SQL dans un fichier texte à l'aide d'un séparateur onglet est comme suit:

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