По умолчанию SQLCMD отправляет все сообщения, не связанные с ошибками, и сообщения об ошибках на стандартный вывод . Следовательно, попытка перенаправить вывод не поможет.
Первое, что вам нужно сделать, чтобы получить только один или другой тип сообщений (с ошибками или без ошибок), - сказать SQLCMD разделить их, отправив сообщения об ошибках (уровень серьезности 11 или выше) в stderr . Это можно сделать с помощью параметра -r
командной строки, указав 0
в качестве параметра этот параметр (т -r0
. Е. ). На данный момент нет видимой разницы с точки зрения запуска SQLCMD и просмотра сообщений любого типа, отображаемых на экране.
Следующая часть - отфильтровать обычные сообщения, идущие на стандартный вывод . Это можно сделать, перенаправив сообщения stdout куда-нибудь через >
, но куда? Вы могли бы сделать > file.txt
, но я сомневаюсь, что вам нужен файл сообщений, с которого вы не хотели начинать. К счастью, в DOS есть NUL
ключевое слово (это не типо: у него есть одно L
, а не два), которое работает как /dev/null
в Unix. Значение вы можете использовать следующий для вывода перенаправления в никуда: > NUL
.
Следующая PRINT
команда выполнит команду и не покажет никаких выходных данных, поскольку ошибки не генерируются, и не создается файл, который бы содержал выходные данные PRINT
команды:
CD %TEMP%
SQLCMD -E -Q "print 1;" -r0 > NUL
Но следующее показывает сообщение об ошибке, поскольку они не перенаправляются на NUL
:
CD %TEMP%
SQLCMD -E -Q "print a;" -r0 > NUL
Возвращает:
Msg 128, Level 15, State 1, Server DALI, Line 1
The name "a" is not permitted in this context. Valid expressions are constants,
constant expressions, and (in some contexts) variables. Column names are not permitted.
2> Err.txt
, но похоже, чтоSQLCMD
он не разделяет вывод.