Назад | Перейти на главную страницу

Есть ли способ запустить sqlcmd для получения вывода запроса без отображения количества затронутых строк?

Я выполняю простой запрос в 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).
**********************************************************************************/