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

Есть ли способ запустить 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)

Похоже, я не могу найти в файле справки ничего, что подсказывало бы мне, как удалить последнюю часть, в которой указано, сколько строк затронуто.

Есть идеи?

решение1

Я думаю, вам может понадобиться опция "SET NOCOUNT ON". Ваш скрипт 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    

Минус количество строк в строке в конце.

решение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).
**********************************************************************************/

решение3

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 и далее (справа).

Связанный контент