2010-09-30 8 views
7

SQLCMD obsługuje parametr -s, aby określić separator kolumn, ale nie mogłem wymyślić sposobu reprezentowania znaku tabulacji (CHAR (9)). Próbowałem następujące, ale oba nie działają:Jak używać TAB jako separatora kolumn w 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 

Wszelkie pomysły, jak to zrobić w SQLCMD?

Odpowiedz

7

Trudno uzyskać niesformatowane wyniki z SQLCMD.

Jeśli chcesz utworzyć plik wyjściowy tabulatorami, BCP może być lepszym wyborem:

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

w pliku wsadowym, kładąc kartę między cudzysłowy działa.

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

zrobić to samo w użyciu pliku PowerShell uciekł cudzysłowów owinięte wokół karcie uciekł

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

Wielki odpowiedź!!!! Dla innych, którzy chcą to zrobić w PowerShell - zauważ, że spacja po '-s' jest ważna. :) –

2

Próbowałem wiele razy, aby przejść rzeczywisty charakter TAB w celu Sqlcmd, a ja po prostu nie mogę go zdobyć. Moim ulubionym dotychczasowym zadaniem jest przekazanie SQLCMD ASCII "Separator Jednostek", który jest hexem 0x1F, i można go wprowadzić w wierszu poleceń, naciskając Ctrl-_ (podkreślenie kontrolne, które na klawiaturze amerykańskiej staje się ctrl-shift -'- '(' - 'obok' 0 'w górnym rzędzie klawiatury)

Zaletą korzystania z "Separatora jednostkowego" jest to, że WYSŁA jest mało prawdopodobne, aby był obecny w tekście dowolnego opis, zaprojektowana specjalnie do tego celu (patrz https://en.wikipedia.org/wiki/Delimiter)

Otrzymawszy sqlcmd to zrobić dla mnie, po czym rura jest wyjście choć stylu Unix polecenia przetłumaczyć jako:

tr '\037' '\t' 

\ 037 jest ósemkowy dla 'Separatora Jednostek', a \ t oznacza znak tabulatora, 'tr' przetłumaczy Zarówno to, co dla nas, jak i my nie musimy polegać na żadnych cytowanych trikach w naszych skryptach lub powłokach.

Aby uzyskać "tr" w systemie Windows, można zainstalować pakiet CoreUtils od GnuWin32 (patrz http://gnuwin32.sourceforge.net/packages/coreutils.htm) lub przejść na wagę i zainstalować pełne środowisko Unix, takie jak Cygwin (http://cygwin.com/).

Umieszczenie dwóch razem otrzymujemy:

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

i to daje swoje wyjście z zakładkami.

Sprawdź inne opcje, których użyłem powyżej, są one niezbędne do uzyskania czystego wyniku z SQLCMD (w kolejności, bez nagłówków, przycinania białych znaków, CRLF do spacji, błędów do STDERR (nie twoich wyników file!) a "^ _" to sposób, w jaki Separator jednostek pojawi się w linii komend). Musisz też dodać "SET NOCOUNT ON"; do zapytania lub skryptu sql, w przeciwnym razie otrzymasz liczbę wierszy jako komunikat testowy pojawiający się w wynikach!

2

Znaleziony dobrą odpowiedź tutaj: SQLCMD outfile as tab delimited text file

  1. Otwórz Notatnik
  2. Wklej to: sqlcmd -S (local) -E -s"<TAB>" -Q "select * from sys.dm_exec_query_stats" -o MyOutput.txt -h-1 -W
  3. Highlight <TAB>, a następnie uderzył w Tab klucz
  4. Uratuj Plik e jako MyBatch.bat
  5. Run MyBatch.bat
2

Podobną odpowiedź na jedno zamieszczonych powyżej, ale jest prostszy w sposób, który moim zdaniem jest istotna.

  1. otworzyć edytor
  2. Prasa Tab
  3. Zaznacz fragment białych znaków (zakładka) utworzona
  4. Kopiuj i wklej to do miejsca, w poleceniu SQL

Mimo że ta karta jest reprezentowana jako szeroki fragment białych znaków, jest to pojedyncza postać.

W drugiej odpowiedzi nie było żadnych niepotrzebnych informacji o wklejeniu całego polecenia z "<TAB>" w nim. Myślę, że to wyrzuca ludzi (to na pewno mnie wyrzuciło).

0

Aby to osiągnąć przy użyciu sqlcmd trzeba użyć znaku Tab tak: \ t Przykładem zapytania eksportu pojedynczą tabelę bazy danych SQL do pliku tekstowego za pomocą separatora tabulatora jest następująca:

sqlcmd -S ServerName -d databaseTableName -Q "SELECT * FROM TABLE_NAME" -o C:\backups\tab_delimiter_bakup.txt -s"\t" 
Powiązane problemy