Dobrą alternatywą jest Sqlcmd, ponieważ nie zawierają nagłówki, ale ma wadę dodawania przestrzeń wyściółki wokół danych dla ludzi czytelności. Możesz połączyć SqlCmd z narzędziem GnuWin32 sed (edycja strumieniowa), aby oczyścić wyniki. Oto przykład, który sprawdził się we mnie, choć nie mogę zagwarantować, że jest kuloodporny.
pierwsze, eksport danych:
sqlcmd -S Server -i C:\Temp\Query.sql -o C:\Temp\Results.txt -s" "
-s" "
to znak tabulatora w cudzysłowach. Zauważyłem, że musisz uruchomić to polecenie za pomocą pliku wsadowego, w przeciwnym razie wiersz polecenia systemu Windows potraktuje kartę jako polecenie automatycznego uzupełniania i zastąpi nazwę pliku zamiast karty.
Jeśli Query.sql zawiera:
SELECT name, object_id, type_desc, create_date
FROM MSDB.sys.views
WHERE name LIKE 'sysmail%'
wtedy zobaczysz coś takiego w results.txt
name object_id type_desc create_date
------------------------------------------- ----------- ------------------- -----------------------
sysmail_allitems 2001442204 VIEW 2012-07-20 17:38:27.820
sysmail_sentitems 2017442261 VIEW 2012-07-20 17:38:27.837
sysmail_unsentitems 2033442318 VIEW 2012-07-20 17:38:27.850
sysmail_faileditems 2049442375 VIEW 2012-07-20 17:38:27.860
sysmail_mailattachments 2097442546 VIEW 2012-07-20 17:38:27.933
sysmail_event_log 2129442660 VIEW 2012-07-20 17:38:28.040
(6 rows affected)
Następnie przetwarza tekst za pomocą sed:
sed -r "s/ +\t/\t/g" C:\Temp\Results.txt | sed -r "s/\t +/\t/g" | sed -r "s/(^ +| +$)//g" | sed 2d | sed $d | sed "/^$/d" > C:\Temp\Results_New.txt
Należy zauważyć, że polecenie 2d
oznacza usunięcie drugiej linii, komendy $d
oznacza usunięcie ostatniej linii, a "/^$/d"
usuwa wszystkie puste wiersze.
wyczyszczoną plik wygląda tak (choć zastąpić zaczepy z |
więc mogą one być wizualizowane tutaj):
name|object_id|type_desc|create_date
sysmail_allitems|2001442204|VIEW|2012-07-20 17:38:27.820
sysmail_sentitems|2017442261|VIEW|2012-07-20 17:38:27.837
sysmail_unsentitems|2033442318|VIEW|2012-07-20 17:38:27.850
sysmail_faileditems|2049442375|VIEW|2012-07-20 17:38:27.860
sysmail_mailattachments|2097442546|VIEW|2012-07-20 17:38:27.933
sysmail_event_log|2129442660|VIEW|2012-07-20 17:38:28.040
Zgłasza błąd: Konwersja nie powiodła się podczas przekształcania wartości varcharowej "COL001" na typ danych int. – Galled
Dodałem przykład, który zawiera wartości liczbowe. Musisz rzucić kolumny liczbowe do varchar (lub nvarchar) –
Klauzula Order By nie działa! – Srinivas