Я выполняю простой запрос в SQL Server 2005 и хочу, чтобы он экспортировался в файл через sqlcmd. Я надеялся получить результаты в формате csv без заголовков и метаданных запроса (сколько строк затронуто). для заголовков вы можете указать -h -1, но как избавиться от конечного текста?
Прямо сейчас у меня есть
sqlcmd -S klingon -d stardb -i C:\testscript.sql -o C:\testresults.csv -h -1 -s ","
со сценарием, это что-то простое на дудку
select x, y, z from agent
К сожалению, результаты такие:
24 aingles1 creablegs
25 tbails12 bull2dog12
26 jtaylor3 Leandon62606
27 forrestw1 nuke19211
(4 rows affected)
Кажется, я не могу найти в файле справки ничего, что подскажет мне, как удалить последнюю часть, которая сообщает мне, сколько строк затронуто.
Есть идеи?
Я думаю, вам может понадобиться опция «УСТАНОВИТЬ НОСЧЕТ ВКЛ». Ваш SQL-скрипт будет выглядеть так:
set nocount on
select x, y, z from agent
set nocount off
И набор результатов будет:
24 aingles1 creablegs
25 tbails12 bull2dog12
26 jtaylor3 Leandon62606
27 forrestw1 nuke19211
Минус количество строк в конце строки.
sqlcmd -S svr -d db ... | findstr /v "rows affected"
findstr
встроен в ОС и аналогичен grep. См. Findstr /? для дополнительных опций.
Чтобы удалить столбец, используйте cut.exe
инструмент. Итак, вы могли запустить:
sqlcmd -S svr -d db ... | cut -c10-
Это будет выводиться только начиная с символа 10, таким образом удаляя номера строк. Соответственно отрегулируйте число 10. Вы также можете попробовать поля:
sqlcmd -S svr -d db ... | cut -f2-
Это выведет только поля 2 и далее (справа).
Я добавляю следующий блок кода в начало самого запроса, чтобы удалить все сообщения при использовании sqlcmd.exe для экспорта результатов в CSV.
-- Suppress warnings and messages like (2 rows effected)
SET ANSI_WARNINGS OFF;
SET NOCOUNT ON;
-- SQLCMD.exe batch command
:setvar SQLCMDERRORLEVEL 1
-- To Reenable
--:setvar SQLCMDERRORLEVEL 0
/**********************************************************************************
** DISABLING WARNINGS AND MESSAGES
** Disable "Changed database context to 'DatabaseName'." message in the CSV file when using
** SQLCMD.exe. You'll get a syntax error when executing this query in Management
** Studio if SQLCMD Mode is not enabled [Query] --> [SQLCMD Mode].
** :setvar SQLCMDERRORLEVEL 1 is used to disable messages like (152 Rows affected).
**********************************************************************************/