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