Хорошей альтернативой является SqlCmd, поскольку он включает заголовки, но имеет недостаток в добавлении пробела вокруг данных для удобства чтения. Вы можете комбинировать SqlCmd с утилитой sed (потоковое редактирование) GnuWin32 для очистки результатов. Вот пример, который работал для меня, хотя я не могу гарантировать, что он пуленепробиваемый.
Сначала экспортируйте данные:
sqlcmd -S Server -i C:\Temp\Query.sql -o C:\Temp\Results.txt -s" "
-s" "
- это символ табуляции в двойных кавычках. Я обнаружил, что вам нужно запустить эту команду через командный файл, в противном случае командная строка Windows будет обрабатывать вкладку как команду автоматического завершения и подставит вместо вкладки имя файла.
Если Query.sql содержит:
SELECT name, object_id, type_desc, create_date
FROM MSDB.sys.views
WHERE name LIKE 'sysmail%'
тогда вы увидите нечто подобное в 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)
Далее, проанализируйте текст с помощью 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
Обратите внимание, что команда 2d
означает удаление второй строки, команда $d
означает удаление последней строки, а "/^$/d"
удаляет все пустые строки.
Очищенный файл выглядит следующим образом (хотя я заменил вкладки на |
, чтобы они могли отображаться здесь):
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