
Я запускаю простой запрос в 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 и далее (справа).