2010-09-30 22 views
7

SQLCMD unterstützt den Parameter -s, um das Spaltentrennzeichen anzugeben, aber ich konnte nicht herausfinden, wie das Tabulatorzeichen (CHAR (9)) dargestellt wird. Ich habe Folgendes versucht, aber beide funktionieren nicht:Verwendung von TAB als Spaltentrennzeichen in 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 

Irgendwelche Ideen, wie dies in SQLCMD zu tun?

Antwort

7

Es ist schwierig, unformatierte Ergebnisse von SQLCMD zu erhalten.

Wenn Sie eine durch Tabulatoren getrennte Ausgabedatei erstellen möchten, BCP könnte eine bessere Wette sein:

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

In einer Batch-Datei, arbeitet eine Registerkarte zwischen den doppelten Anführungszeichen setzen.

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

das gleiche in einer Powershell-Datei verwenden zu tun

um ein entflohener Tab gewickelt doppelte Anführungszeichen entgangen
sqlcmd -S ServerName -E -Q"select * from mytable" -s `"`t`" -o results.txt 
+0

Groß Antworten!!!! Für andere, die dies in PowerShell tun möchten - beachten Sie, dass das Leerzeichen nach "-s" wichtig ist. :) –

2

ich mehrmals versucht haben, die tatsächliche TABULATORZEICHEN um SQLCMD, und ich einfach weitergeben kann es nicht hinkriegen. Mein bisher beliebtestes Problem besteht darin, SQLCMD das ASCII "Unit Separator" (hex 0x1F) zu übergeben und in der Befehlszeile durch Eingabe von Ctrl-_ einzugeben (Steuerunterstrich, der auf einer US-Tastatur zu ctrl-shift wird) -'- '(das' - 'neben der' 0 'in der obersten Zeile der Tastatur)

Der Vorteil der Verwendung der' Unit Separator 'ist, dass es höchst unwahrscheinlich ist, dass sie in Text vorhanden ist Beschreibung und speziell für diesen Zweck entwickelt wurde (siehe https://en.wikipedia.org/wiki/Delimiter)

Nachdem SQLCMD bekam das für mich zu tun, mich dann Rohr es Ausgang wenn ein Unix-Befehl übersetzen als:

tr '\037' '\t' 

Das \ 037 ist oktal für das 'Unit Separator', und \ t stellt das Tab-Zeichen dar, 'TR' wird BEIDE von diesen für uns übersetzen, wir müssen uns in unseren Skripten oder Shells nicht auf irgendwelche Tricks verlassen.

Um 'tr' unter Windows zu erhalten, können Sie das CoreUtils-Paket von GnuWin32 installieren (siehe http://gnuwin32.sourceforge.net/packages/coreutils.htm) oder schwer arbeiten und eine vollständige Unix-Umgebung wie Cygwin (http://cygwin.com/) installieren.

Putting die beiden zusammen erhalten wir:

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

und dies wird Ihnen Ihre Ausgabe mit Tabs. Die anderen Optionen, die ich oben verwendet habe, sind wichtig für den Versuch, eine saubere Ausgabe von SQLCMD zu erhalten (in der Reihenfolge; keine Header, Leerzeichen, CRLF zu Leerzeichen, Fehler zu STDERR (nicht Ihre Ausgabe) Datei!) und die '^ _' ist, wie das Unit Separator in der Befehlszeile angezeigt wird). Sie müssen auch "SET NOCOUNT ON;" hinzufügen. zu Ihrer Abfrage oder Ihrem SQL-Skript, sonst erhalten Sie die Zeilenanzahl als eine Testmeldung, die in Ihrer Ausgabe erscheint!

2

Gefunden eine gute Antwort hier: SQLCMD outfile as tab delimited text file

  1. Öffnen Sie den Editor
  2. Einfügen: sqlcmd -S (local) -E -s"<TAB>" -Q "select * from sys.dm_exec_query_stats" -o MyOutput.txt -h-1 -W
  3. Highlight <TAB>, dann drücken Sie die Tab Schlüssel
  4. Speichere th e-Datei als mybatch.bat
  5. Run mybatch.bat
2

Eine ähnliche Antwort auf eine oben gepostet, aber es ist einfacher, in einer Weise, dass ich glaube, von Bedeutung ist.

  1. Öffnen Sie Ihren Texteditor
  2. Press Tab
  3. Markieren Sie den Brocken von Leerzeichen (die Registerkarte) erstellt
  4. Kopieren Sie, dass in der Stelle in der SQL-Befehl

Auch wenn diese Registerkarte als ein großes Stück Leerzeichen dargestellt wird, ist es ein einzelnes Zeichen.

Die andere Antwort hatte einige unnötige Sachen über das Einfügen des gesamten Befehls mit "<TAB>" darin. Ich denke, das wirft die Leute ab (es hat mich gewiß abgeschreckt).

0

dies mit erreichen sqlcmd Sie wie so die Tab-Zeichen verwenden müssen: \ t Ein Beispiel Abfrage eine einzelne SQL-Datenbank-Tabelle in eine Textdatei mit einem Tab-Trennzeichen exportieren wird wie folgt:

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